私は次のような状況にあります。(これのjsfiddleはここにあります)
HTML
<div id="container">
<input type="text" id="txtBox" />
<div>
<div class="option">Option 1</div>
<div class="option">Option 2</div>
<div class="option">Option 3</div>
</div>
<div id="out"></div>
</div>
Javascript(jQuery)
$(".option").click(function(){
$("#out").append("<br/>clicked " + $(this).html());
$("#txtBox").val($(this).html());
});
$("#txtBox").change(function(){
$("#out").append("<br/>changed value to " + $(this).val());
});
ユーザーはテキストボックスに値を入力するか、オプションのリストから値を選択することができます。選択した値はajax呼び出しを使用してデータベースに書き込まれます。ユーザーが値を入力すると、テキストボックスで変更ハンドラーがトリガーされます。代わりにオプションがクリックされると、クリックハンドラーが使用されます。
問題は次の手順にあります。
- テキストボックスにランダムな値を入力します
- オプションをクリックします
- ->変更ハンドラーとクリックハンドラーが同時にトリガーされます。
変更ハンドラーはテキストボックスにあったランダムな値を使用してトリガーされ、クリックハンドラーはオプションのhtml属性を使用してトリガーされるため、この最後の状況は非常に望ましくありません。
私が欲しいのは、クリックハンドラーを実行し、変更ハンドラーがこの状況で何もしないことです(または、考えられる各ユースケースで1つのアクションを実行するだけの効果を生み出す別のソリューションです。これにアプローチする方法を知っている人はいますか? ?