2016-04-10 7 views
0

onが呼び出されると、changeに加えて、イベントハンドラを1回実行する必要があります。私は<select>を変更したときにページの動作を変更しました。そのボタンのデフォルト値も設定されています。そのため、実際にchangeが発生する前に初めてchangeハンドラを実行する必要があります。初めて呼び出されるALSOのjQueryイベントハンドラ

例(実際のコードははるかに複雑である):

<select id="sel"><option>A<option>B<option>C</select> 
<a id="go" href="#">Go</a> 
<script> 
    var base = "/act/"; 
    function update_go(){ 
     $('#go').prop('href',base+$(this).val()); 
    } 
    $('#sel') 
     .on('change',update_go) // update button when select is changed 
     .each(update_go); // update button with the default value of the select 
    // todo: check: when select value is remembered by browser, does it work as it should? 
</script> 

私は.onが呼び出されるときは常に、一度、実行されるイベントを許可し、jQueryのイベントを拡張したいと思います。このようにして.eachを省略し、インラインの匿名関数を使用することができます。そのような何か:

$('#sel').on('change runonce',function(){ 
      $('#go').prop('href',base+$(this).val()); 
    }); 

それは私が気付いていないよイベントハンドラを実行することができるので、私は.trigger('change')をコールする必要はありません。また、triggerを呼び出すことは、多くの要素が関わっているときには驚くほど高価です。それで私はtrigger('runonce')に電話したくありません。

eachを使用するか、関数呼び出しを使用するほうがはるかに高速で見栄えが良いですが、すべてのイベントに対して名前付き関数が必要です。 https://jsfiddle.net/oriadam/Lu9ym1xy/13/

JSPerf: http://jsperf.com/jquery-custom-trigger-vs-each-vs-function-call1

+0

あなたはjqueryの中で '1' の方法を確認しましたか? –

+1

'私は