onChange函数未定义。

24

这肯定是一个简单问题。我在互联网上搜索,只找到语法错误作为此问题的原因,但我找不到语法错误。

以下是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错误,显示该函数未定义。我真的很困惑。我是否拼错了'hi'?


尝试在单行函数中使用;,因为解释器需要知道每个语句的结束位置。 - Mihai Stancu
谢谢你的回答,但是经过测试,我发现它在有或没有分号的情况下都可以工作。 - Expedito
5个回答

27

hi函数只在ready事件处理程序内部可用。将其移出事件处理程序,或在其中处理绑定(并从标记中删除内联事件处理程序属性):

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

7

hi函数仅在ready块中定义。在外部,它不再存在。

您无需将函数定义包装在.ready()中,因此只需删除它。或者,像这样定义函数:

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

3

在你的代码块中:

<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>

3

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)

3
<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();" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接