2

jqueryのblurおよびonblurイベントで見知らぬ問題に固執しました。入力時にブラーを実行すると、最初に onblur イベントが実行され、.blur メソッドが実行されます。ただし、アンカータグをクリックしてトリガー.blurを呼び出すと、.blurメソッドが最初に実行され、次にonblurイベントが実行されます。なぜこの違いとこれに対する解決策。デモ

<head>
    <script type="text/javascript" src="jquery-1.8.3.js"></script>
    <script type="text/javascript">
        $(function () {
            $('a').click(function () {
                $('input').blur();
            })
        })

        function test() {
            alert(0);
        }
        $(function () {
            $('input').blur(function () {
                alert(1);
            })
        })
    </script>
</head>
<body>
    <input type="text" onblur="test()" />
    <a href="#">blur input</a>
</body>
4

2 に答える 2

0

注:$('input').blur()一度に 1 つのアイテムしかフォーカスされないため (存在する場合)、これを行うことはあまり意味がありません。その構文を使用した後に何かが起こるという事実は、jQuery によるものです (それに登録されたハンドラーを起動し、(この例では) 実行を試みbluronblur属性を関数として実行しようとします。一方、blur()通常の DOM ノード (のような$('input')[0].blur()) で呼び出すと、 isn't currently focus には何の効果もありません (blur ハンドラは起動しません)。

なぜそれをやろうとしているのか、完全にはわかりませんが、それを主張し、基本的に onblur 属性で定義されたものよりも前にぼかしハンドラーが起動するようにしたい場合は、デュアルアプローチを使用できます (jQuery.onおよび通常のハンドラ レジスタ)。そうすれば、最初のハンドラーまたは 2 番目のハンドラーのいずれかが、属性で割り当てられたハンドラーの前に起動します。

ここの基本的な例http://jsfiddle.net/W3BDW/5/

特に、複数回起動する可能性がある場合は、微調整が必​​要です (その場合、ハンドラーを動的に調整するか、イベントが既に処理されている場所に情報を保存します)。

于 2013-03-26T09:24:58.137 に答える
0

あなたが質問で述べたように、そのように起こっているとは思いませんonblur event execute after blur

現在のコードは、最初にインラインで起動onblurし、次に jQuery のblur.

あなたのコードは意図したとおりに機能していますが、これは 1 つとそのdoc ready外側に機能テストがある方が優れています。

function test() {
   alert(0);
}
$(function () {
   $('a').click(function () {
      $('input').blur();
   });

   $('input').blur(function () {
      alert(1);
   });
});
于 2013-03-26T09:26:47.697 に答える