对jquery使用requirejs我遇到了绑定事件的方法调用问题。拥有以下代码:
define(["jquery"], function($) {
function showRowItem(item) {
console.log('method in');
}
jQuery(document).ready(function () {
jQuery('ul#topnav-firstrow li').each(function () {
jQuery(this).bind("mouseover", function (event) {
if (outTimerID != null) {
clearTimeout(outTimerID);
outTimerID = null;
}
globalMouseOverItem = this;
inTimerID = window.setTimeout("showRowItem(globalMouseOverItem)", inDelay);
});
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
当我悬停在项目上时,事件被触发但方法无法识别
Uncaught ReferenceError: showRowItem is not defined
这是一个用于重现错误的codepen http://codepen.io/deroccha/pen/WxQLoy
答案 0 :(得分:0)
将字符串传递给setTimeout
既错又不必要,这样做会导致遇到问题,因为字符串的评估被延迟,因此发生在showRowItem
可用的上下文之外。你可以这样做:
window.setTimeout(showRowItem.bind(globalMouseOverItem), inDelay);
或者使用当前代码,这将是等效的:
window.setTimeout(showRowItem.bind(this), inDelay);
您可以省略globalMouseOverItem
。