2016-07-08 2 views
0

私はいくつかのオプションを持つ2つの選択要素を持っています。2 JavaScript関数の実行を互いに排他的にする方法は?

// ########### Linked Labour Select Boxes 
$('body').on('change', '#labourList > li .labourerID', function() { 
    var id = $(this).val(); 
    $(this).parent().find('.labourerName').val(id).change(); 
}); 


$('body').on('change', '#labourList > li .labourerName', function() { 
    var id = $(this).val(); 
    $(this).parent().find('.labourerID').val(id).change(); 
}); 

現時点での一つの方法は、私はそれを避けることができるか、私のページは少し遅くなって、他の1がトリガされますか?

+0

を試してみてください? –

+1

'new value'と' old value'を確認してください。両方が同じ場合、 'change'を起動しないでください。それ以外の場合は 'change'を呼び出します。両方のイベントでこれを確認する必要があります。あなたが直面している問題は、それぞれのイベントが連続して他のイベントを呼び出すことだと思います。それは無限に進むだろう。発射前の状態を確認して、「変更」が私が今考えることができる最高のものです。 – Venky

+0

なぜあなたは 'change()'イベントを明示的に起動していますか? –

答えて

1

私はフラグを使用して、選択時に発生した変更がスクリプトのユーザーのためであることを伝えました。

これを確認してください。

ユーザーが1つを変更すると、セカンドセレクトで何も実行されないため、チェンジチェーンが壊れます。

var script_triggred_change = false; 
 

 
$("#one").change(function() { 
 
    console.log("Called One"); 
 
    if (script_triggred_change) return; 
 
    script_triggred_change = true; 
 
    $("#two").val($("#one").val()).change(); 
 
    script_triggred_change = false; 
 
}); 
 

 
$("#two").change(function() { 
 
    console.log("Called Two"); 
 
    if (script_triggred_change) return; 
 
    script_triggred_change = true; 
 
    $("#one").val($("#two").val()).change(); 
 
    script_triggred_change = false; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<select id="one"> 
 
    <option value="1">1</option> 
 
    <option value="2">2</option> 
 
    <option value="3">3</option> 
 
</select> 
 
<select id="two"> 
 
    <option value="1">1</option> 
 
    <option value="2">2</option> 
 
    <option value="3">3</option> 
 
</select>

+0

どうすればこのことを考えることができないのでしょうか、私にとって何が問題なのでしょうか101.おかげで:) – Heraclitus

1

あなたがjsFiddleを投稿することができ、この

var once = false; 
 
$('select').on('change', function(e) { 
 
    if(once) { 
 
    once = false; 
 
    return; 
 
    } 
 
    
 
    once = true; 
 
    $('select').not(this).val($(this).val()).change(); \t 
 
});
select, option { 
 
    padding: 5px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div> 
 
    <select class="lab-ids"> 
 
    <option value="1">1</option> 
 
    <option value="2">2</option> 
 
    <option value="3">3</option> 
 
    <option value="4">4</option> 
 
    <option value="5">5</option> 
 
    </select> 
 

 
    <select class="lab-name"> 
 
    <option value="1">Peter</option> 
 
    <option value="2">Hans</option> 
 
    <option value="3">Fritz</option> 
 
    <option value="4">Sandra</option> 
 
    <option value="5">Jessy</option> 
 
    </select> 
 
</div>

+0

シンプルで読みやすい+1 – kaito

+1

ここで何をしているのかよく分かりません。特定の要素は、2つのいずれかが変化したときに機能を変更します。そうですか?それは確かにエレガントで非常にスマートに見えます。私は良い古いフラグを使用して私の問題を修正しました。 – Heraclitus

関連する問題