2012-09-27 97 views
7

这一定是简单的事情。我搜索了互联网,只发现语法错误是这个问题的原因,但我找不到语法错误。onChange函数未定义

这里的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> 

和HTML:

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

在页面加载的功能hi称为预期,但我onChange事件导致Firebug的错误,称功能不定义。我真的很难过。我拼错'嗨'了吗?

+0

尝试使用';'内的单行函数,因为解释需要知道一切都结束了。 –

+0

感谢您的回答,但经过测试,我发现它可以在分号和分号之间使用。 –

回答

14

hi函数仅在ready事件处理函数的范围内。移动它的事件处理程序的外部,或处理所述结合里边有(和删除从标记行内的事件处理程序的属性):

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

很棒的回答。谢谢!它可能花了我32年的时间来弄清楚。 –

4

hi功能仅在ready块定义。外面,它不再存在。

您不需要将功能定义包装在.ready()中,只需将其删除即可。另外,这样定义函数:

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

在你的代码块:

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

hi不是全局函数。您只能在function(){...}的范围内访问它,而不是从外部访问它。

由于您使用的是jQuery,因此您可以更改将函数绑定到onChange事件的方式。而不是从HTML标签调用它,你可以这样写:

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

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

onchange当控制模糊时才会触发。改为尝试onkeypress

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

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

使用下面的事件,而不是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();" />