2011-06-23 21 views
7

現在、jQueryのテキストボックスにフォーカスしている場合、onblurイベントの前にonclickイベントを最初に起動できますか?jQuery:onclickの前にonclickを最初に起動する方法は?

期待される出力:ボタンのクリックイベントは、texboxのブラーイベントの前に最初に発生します。アラート "onclickの警告myBtnです"

デモ:http://jsfiddle.net/Zk8Fg/

コード:

<input type="text" name="fname" id="fname" value="" /><br /> 
<input type="button" name="mybtn" id="mybtn" value="Click Me" /> 

<script language="javascript"> 
$(document).ready(function() { 
    myFunc(); 
}); 

function myFunc() { 
    $('#fname').focus().blur(function() { 
     alert('fname onblur alert'); 
    }); 

    $('#mybtn').click(function() { 
     alert('mybtn onclick alert'); 
    }); 
} 
</script> 

感謝:)の入力フィールドは、現在フォーカスされている場合、あなたは別の上

+0

'$ .focus()。blur()'で何をしようとしていますか? – Sampson

+1

私はなぜ、あなたがやろうとしていることを聞くことができますか?多分誰かがいくつかの選択肢を提案できるでしょうか? UIイベントは特定の順序で発生し、変更することはできません。 –

+0

@Jonathan:現在、テキストボックスにフォーカスされているぼかしイベントの検証がありますが、ぼかしシナリオはボタンをクリックした後、ぼかしイベントがclickイベントより先に発生します。 – marknt15

答えて

3

集中することができません最初のフォーカスをぼかさずにそれが何をしようとしていても、おそらくもっと良い方法があります。イベントの

可視ログ:http://jsfiddle.net/Zk8Fg/3/

+0

それはできないのですか?おそらくこれには回避策がありますか?ありがとう – marknt15

+3

@ marknt15標準的なイベントシーケンスを逸脱することはできませんが、それはあなたがしようとしていることを達成することは不可能ではありません。あなたが達成したいことを私たちに教えてください、私たちは助けに全力で取り組んでいきます。 – Sampson

6

まあそれはおそらくイベント火災は最初、おそらく順序を変更すべきではないので、標準の一部です。あなたが何をすることができるかは、短い遅延でwindow.setTimeoutを使用して結果のアクションを延期することです。

$('#fname').focus().blur(function() { 
    window.setTimeout(function(){alert('fname onblur alert')},0.1); 
}); 

私は、デフォルトのイベントの順序を変更することは、おそらくよりエレガントなソリューションを提供していラメハックとして私を打つために、あなたがこのことについてつもりか再考すべきであるように、しかし、それは本当に見え他のコメントに同意します。

+0

ありがとう@SpliFF。これは最高の答えです。 :) –