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>

最初のイベントが自動的に呼び出される理由がわかりません (例の「ここ」)。クリックに応じてのみ呼び出されるべきだと思われますか? 何が得られないのですか?本当にばかげた構文の問題が発生した場合は、事前に申し訳ありません。

thx事前に

4

3 に答える 3

5

関数を呼び出して、その戻り値を に渡しているためです.on()。達成しようとしているものを達成する最も簡単な方法.on()は、2 番目の例のように匿名関数を に渡し、そのconsole_this中で関数を呼び出すことです。

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

これが更新された fiddleです。

于 2012-11-01T12:17:48.117 に答える
2

関数を呼び出しているため

arc.handler.console_this('here')

それは機能を割り当てることではありません。2番目のように見えるはずです。

$('.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');   });

最初の行では、メソッドを呼び出して、結果をイベントにバインドしようとしています。

2 行目で、イベント バインディングを設定できます。

于 2012-11-01T12:21:36.683 に答える