2012-09-27 41 views
7

Điều này đã có được một cái gì đó đơn giản. Tôi đã tìm kiếm trên internet và chỉ tìm thấy lỗi cú pháp là nguyên nhân của sự cố này, nhưng tôi không thể tìm thấy lỗi cú pháp.chức năng onChange không được xác định

Đây là javascript:

<script type="text/javascript" src="http://localhost/acrilart/javascript/jquery-1.6.4.min.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function(){ 
     function hi(){ 
      alert('hi'); 
     } 
     hi(); 
    }); 
</script> 

Và HTML:

<input type="text" name="cep" value="" id="cep" class="required cep field" 
     onChange="hi()" /> 

On pageload chức năng hi được gọi như mong đợi, nhưng sự kiện onChange của tôi gây ra một lỗi Firebug, nói rằng chức năng không phải là được xác định. Tôi thực sự bối rối. Tôi đã nói sai 'hi' chưa?

+0

Hãy thử và sử dụng '; 'bên trong chức năng one-liner vì thông dịch viên cần biết nơi mọi thứ kết thúc. –

+0

Cảm ơn câu trả lời của bạn, nhưng sau khi thử nghiệm tôi thấy rằng nó hoạt động với và không có dấu chấm phẩy. –

Trả lời

14

Chức năng hi chỉ nằm trong phạm vi bên trong trình xử lý sự kiện ready. Di chuyển nó bên ngoài xử lý sự kiện, hoặc xử lý các ràng buộc bên có (và loại bỏ các thuộc tính xử lý sự kiện inline từ đánh dấu):

$(document).ready(function(){ 
    function hi(){ 
     alert('hi'); 
    } 
    $("#cep").on("change", hi); 
}); 
+0

Câu trả lời hay. Cảm ơn! Tôi có thể mất 32 năm để tìm ra điều đó. –

4

Các hi chức năng chỉ được định nghĩa trong khối ready. Bên ngoài, nó không còn tồn tại nữa.

Bạn không cần phải quấn các định nghĩa chức năng trong .ready(), vì vậy, chỉ cần xóa nó. Ngoài ra, xác định các chức năng như thế này:

window.hi = function() {...} 
1

Trong khối mã của bạn:

<script type="text/javascript"> 
    $(document).ready(function(){ 
     function hi(){ 
      alert('hi'); 
     } 
     hi(); 
    }); 
</script> 

hi không phải là một chức năng toàn cầu. Bạn chỉ có thể truy cập nó trong phạm vi function(){...} của bạn, không phải từ bên ngoài.

Vì bạn đang sử dụng jQuery, bạn có thể thay đổi cách bạn liên kết chức năng của mình với sự kiện onChange. Thay vì gọi nó từ thẻ html, bạn có thể viết:

<script type="text/javascript"> 
    $(document).ready(function(){ 
     function hi(){ 
      alert('hi'); 
     } 
     hi(); 

     $('#cep').on('change', function(){ hi(); }); 
    }); 
</script> 
1

onchange chỉ được kích hoạt khi điều khiển được mờ. Thay vào đó, hãy thử onkeypress.

$("#cep").on("change", function() { 
    alert(1); 
}); 

hoặc

<input type="text" name="cep" value="" id="cep" class="required cep field" 
onkeypress="hi()" /> 

Sử dụng sau các sự kiện thay vì onchange:

- onkeyup(event) 
- onkeydown(event) 
- onkeypress(event) 
2
<script src="http://code.jquery.com/jquery-latest.js"></script> 

<script type="text/javascript"> 
function hi(){ 
    alert('hi'); 
} 
</script> 

<input type="text" name="cep" value="" id="cep" class="required cep field" onKeyPress="javascript:hi();" /> 
Các vấn đề liên quan