2011-09-01 8 views
2

私は<select>を持っていて、change()イベントを処理します。ユーザーが選択オプションを変更すると、一連のアクションを実行します。しかし、私が$(item).trigger('change')経由で変更をトリガーする場合、私は一連のアクションを実行したくありません。jQuery - ユーザーとプログラムイベントを判断する

trigger() containsにパラメータが設定されています。私はカスタムイベントを書いていないので、これがうまくいくかどうかは分かりません。ですから、ユーザーが発したイベントとプログラムの発生したイベントの違いを判断するにはどうすればよいですか?ここで

+0

hmm ...なぜイベントをトリガーするのですか?あなたが探している副作用でなければなりませんか?ユーザー対プログラムに関係なく実行する必要のある変更ハンドラコードはありますか? – dotjoe

+0

@dotjoe - ちょっと説明が必要です。基本的に私はウェブサイトをデスクトップアプリケーションのように振舞わせています。私の$ .get()リクエストで競合状態を避けるために、特定の順序でイベントをトリガする必要があります。 –

答えて

1

はそれを行うための間に合わせと-方法です:

var progChange = false; 

$('select').change(function() { 
    if (!progChange) { 
     // Do user actions...    
    } 
    progChange = false; 
}); 

function callSelectChange() { 
    progChange = true; 
    $('select').change(); 
} 

あなたは、本質的に同じ方法でtrigger方法でそれを行うことができ、そしてそれは良いことである、グローバルを排除します:

$('select').change(function(event, progChange) { 
    if (!progChange) { 
     // Do user actions... 
    } 
}); 

$('select').trigger('change', [true]); 

の作業例:あなたのprogrammtic CAからフラグを渡すことによって、それをあなたは通常、これを行うことはできません、しかし、あなたは偽物できhttp://jsfiddle.net/FishBasketGordo/XsPc5/

+0

グローバル変数の代わりに$( 'select')。data( 'progchange')を使用できます。また、私はなぜブロック内でprogChangeをfalseに設定するのかわかりません。実行中の場合は、すでにfalseです。 – vhallac

+0

はい、このタイプのイベントが2つの異なるノードで発生した場合に何が起こるかとして、グローバルは悪いですか? – jyore

+0

これは、理由のためにクイックアンドダーティと呼ばれています。 2番目の方法は間違いなく良い方法です。 – FishBasketGordo

3

ll。

$('.selector').bind('click', function(event,data) { 
    if(typeof(data.programmatic) === 'undefined') { 
     //Do user stuff here 
    } else { 
     //Do progammatic stuff here 
    } 
}); 

//Call programmitcally 
$('.selector').trigger('click',{programmatic:true}); 
+1

+1 - これは良い答えです。 .change()メソッドが.bind()メソッドより読みやすくなっているため、私はもう一つの答えを選びました。私はグローバル変数を使用しませんでした。 –

+0

バインドする利点は、複数のイベントまたはカスタムイベントを設定できることです。例えば、次のようにします:$( '。selector')。bind({click:function(){...}、change:function(){...}、mouseover:function(){...}}) 'または$( '。selector')。bind( 'myEvent'、function(){...}); '。もう一つは単にbindを使う簡潔な方法です。これは実際にbindを呼び出します。どちらを好むか好きなのはもちろん最高です:) – jyore

関連する問題