在jquery绑定事件上的RequireJS不会触发方法

时间:2016-06-08 09:02:29

标签: jquery events error-handling binding requirejs

对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

1 个答案:

答案 0 :(得分:0)

将字符串传递给setTimeout既错又不必要,这样做会导致遇​​到问题,因为字符串的评估被延迟,因此发生在showRowItem可用的上下文之外。你可以这样做:

window.setTimeout(showRowItem.bind(globalMouseOverItem), inDelay);

或者使用当前代码,这将是等效的:

window.setTimeout(showRowItem.bind(this), inDelay);

您可以省略globalMouseOverItem