2012-01-05 6 views
1

のは、私はこれを行うとしましょう:MooToolsのが追加されたイベントを無効にしたり、傍受

$('field').addEvents ({ 
    'focus' : function() { // do some stuff } 
    'blur' : function() { // do other stuff } 
}); 

これはすべての私のテキスト入力フィールドのデフォルトの動作です。

$('shinyButton').addEvent('click', function() { 
    stopDefaultBlurFunctionInCurrentlyFocussedField(); 
    // do seriously cool stuff 
    if (finishedDoingSeriouslyCoolStuff) { 
    $('field').focus(); // return focus to input field 
    } 
} 

ので:私は今、やりたいことは

<button id='shinyButton' name='shinyButton'>Poke Me</button>

この

のようなものである

1)私はstopDefaultBlurFunctionInCurrentlyFocussedFieldありませんか();?

2)私が実際に完了したかどうかを確認するにはどうすればいいですか?

+0

は難しいですが、それはぼかしと同様にクリックをオフに解雇されます、あなたはクリアすることができ、ブレコールバックに小さな遅延を使用することができます。クリックで - 理想的ではありませんが、クリックが期待以上に長いマウスを保持しているために長いクリックになる可能性があります。または、これらのすべてを親フォームに委譲してeventTargetsなどを確認できます。簡単な作業です。また、bluroverが正常に終了して終了するフィールドにフラグを設定するmouseoverイベントをボタンに追加します。 –

+0

gotcha。私の意思と目的のためにそうです。 :Dもう一度@Dimitarに感謝します。 sidenoteとして、私はあなたが独学でもあるのを見ます。私に希望を与える!笑。 – WhiteRau

+0

それはうまくいきます。 http://jsfiddle.net/dimitar/edsqg/1/をチェックしてください - 私が言ったように、あなたがマウスオーバーをクリックするとフィールドのバリデーションを引き起こさないようにするために必要なフィールド上のブラーイベントを無効にします。他のぼかしの意志。 –

答えて

0

厳密に言えば、クリックハンドラの前にblurイベントが発生するため、あなたがしたいことはできません。

mouseoverでイベントを無効にすると、Mouseユーザーはうまく動作しますが、ユーザーはキーボードでボタンをトリガーできません。

一つのオプション(ただし、ハックのビット)blurイベントハンドラの中に小さな遅延を導入することで、焼成イベントを制御するための変数フラグを使用することになり、それは感知できないですので、(あなたがチューニングする遅延を必要とするかもしれませんが、それでもあなたの目的のために十分な長:フィールドに焦点を当てながら、ボタンをクリック

var disableBlurMethod = false; 

$('field').addEvents ({ 
    'focus' : function() { // do some stuff } 
    'blur' : function() { 
    (function() { 
     if (!disableBlurMethod) { 
     // do some stuff 
     } 
    }).delay(50); 
    } 
}); 

$('shinyButton').addEvent('click', function() { 
    disableBlurMethod = true; 
    // do seriously cool stuff 
    if (finishedDoingSeriouslyCoolStuff) { 
    disableBlurMethod = false; 
    $('field').focus(); // return focus to input field 
    } 
} 
関連する問題