0

我已经创建了这个片段http://jsfiddle.net/PexkV/

<script>
var arc={};

arc.handler={
  background_color:'#8DBC8F',
  console_this: function(str){
    alert('lets write this to the console ' + str + ' ' + this.background_color);
  }

}

$(document).ready(function(){
  $('.more-click-me').on('click', arc.handler.console_this('here'));
  $('.more-click-me').on('click', function(){
    arc.handler.console_this('blue');
  });

});
</script>
<div class='more-click-me'>lets write this</div>

并且不确定为什么会自动调用第一个事件(示例中的“此处”)。似乎只应在点击时调用它?我没有得到什么?如果我提出了一些非常愚蠢的语法问题,请提前道歉。

提前谢谢

4

3 回答 3

5

因为您正在调用该函数并将其返回值传递给.on(). 实现您要实现的目标的最简单方法是将匿名函数传递给.on(),就像您在第二个示例中所做的那样,并在其中调用您的console_this函数:

$('.more-click-me').on('click', function () {
    arc.handler.console_this('here');
});

这是一个更新的小提琴

于 2012-11-01T12:17:48.117 回答
2

因为您正在调用该函数

arc.handler.console_this('here')

那不是分配功能。它应该看起来像第二个。

$('.more-click-me').on('click', arc.handler.console_this('here'));  <-- wrong
$('.more-click-me').on('click', function(){  <-- right, uses a closure
    arc.handler.console_this('blue');
});

所以应该是

$('.more-click-me').on('click', function(){ arc.handler.console_this('here'); });  
$('.more-click-me').on('click', function(){ arc.handler.console_this('blue'); });
于 2012-11-01T12:17:32.557 回答
0
$('.more-click-me').on('click', arc.handler.console_this('here'));
$('.more-click-me').on('click', function(){
    arc.handler.console_this('blue');   });

在第一行中,您正在调用方法并尝试将结果绑定到事件。

第二行足以设置事件绑定。

于 2012-11-01T12:21:36.683 回答