2010-04-26 26 views
0

我我的结束标记之前有<script>...</script>这里我平时jQuery的大教堂和HTML身体功能

$(function() { 
    function test(){ 
     alert("test"); 
    } 
}); 
在我的HTML

我有输入标签<input type="text" onchange="test()" />

我得到测试的误差未定义。我试图让IE7的通话功能onchange我有一个完整的解决方案,但由于IE7不喜欢.change()我打算把onchange属性内的输入,但现在我有这个问题。

任何想法如何解决这个问题?

回答

0

如果你使用jquery,那么无处不在使用jquery。

$(document).ready(function(){ 

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

}); 
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"); 
} 
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来做所有事情。