0

在我<script>...</script>的结束身体标签之前,我有通常的

$(function() {
   function test(){
      alert("test");
   }
});

在我的 html 中,我有输入标签<input type="text" onchange="test()" />

我得到那个测试的错误是未定义的。我正在尝试使 IE7 调用函数onchange我有一个完整的解决方案工作但由于 IE7 不喜欢.change()我将onchange属性放在输入中但现在我遇到了这个问题。

知道如何解决这个问题吗?

4

3 回答 3

1

test是未知的,因为它是匿名函数(ready处理程序)本地的,并且不暴露给外界。该函数只是一个ready在页面 DOM 准备就绪时调用的处理程序。如果要公开test,则需要执行以下操作:

var eventHandlers = $(function() {
   function test() {
      alert("test");
   }

   return {test: test};
})();

这有点矫枉过正,只有在您使用模块模式并使用封装时才有必要。您现在可以使用eventHandlers.test(). 如果封装不是问题,我建议在ready处理程序中绑定到 jQuery:

jQuery(document).ready(function(){
    jQuery("#myInput").bind("change", function() {
      alert("test");
    });
});

您也可以简单地将函数定义为:

function test() {
  alert("test");
}

这将是最简单的方法。但是,我建议不要混合不同的做事方式。如果您使用 jQuery,请坚持使用 jQuery 做所有事情。

于 2010-04-26T20:39:13.700 回答
0

如果您使用 jquery,请在任何地方使用 jquery。

$(document).ready(function(){

$('input').bind('change',function(){
alert("hi");
});

});
于 2010-04-26T20:35:27.980 回答
0

要以这种方式使用它,您需要在该范围之外使用它,使用此,不使用document.ready包装:

function test(){
  alert("test");
}

如果将其包装在document.ready处理程序中,则它仅在该范围内可用,您需要为此在外部声明该函数。但是,您也可以在 jQuery 中完全做到这一点,如下所示:

HTML:

<input type="text" id="myElem" />

jQuery:

$(function() {
  $('#myElem').change(function() {
    alert("test");
  });
});
//or, if you wanted the external function for another reason:
$(function() {
  $('#myElem').change(test);
});
function test(){
  alert("test");
}
于 2010-04-26T20:35:44.577 回答