2010-12-04 7 views
2

テキストボックスからblurイベントが発生したときに何かする必要があります。jQueryを使用してblurイベントをキャッシュする

問題は、ユーザが「Enter」キー を押したとき、およびマウスが他の場所でクリックされたときにも発生するという問題です。

マウスを別の場所でクリックすると、特定の操作を行う必要があります。どうすればいい?

+0

私はここに明確ではありませんよ。あなたが実際に欲しがっているぼかしイベントとあなたが望まないイベントを言うことができますか? –

+0

ユーザがEnterキーを押すと、blurイベントがスクリプトを介して起動され、ユーザがドキュメント上のどこかをクリックするとjsエンジンによってblurイベントが発生します。両方を捕捉したいが両方のタイプイベント – Shaheer

答えて

0

これは、方法であってもよい。

<script src="http://code.jquery.com/jquery-1.4.4.js"></script> 
<input id="txtbox" ><input> 

<script> 

$(document).click(function() 
        { 
         if($('#txtbox').data('blurred')==1) 
         { 
         $('#txtbox').data('blurred',0); 
         alert('blurred by click'); 
         } 
        } 
       ); 

$('#txtbox').blur(function(e) 
        { var _this=this;$(_this).data('blurred',1); 
        setTimeout(function(){$(_this).data('blurred',0);} ,200); 
        } 
       ).unbind('click'); 

</script> 

これは、(入力のデータ内に格納されている「ぼやけ」という名前の)フラグを使用します。

したがって、ぼかしイベントが発生した場合、このフラグは最初に1に設定され、後で0に設定されます(この瞬間は、あとで起動するには十分です)。ドキュメント上でクリックが発生すると、このフラグがチェックされます。

1

また、これは役立つかもしれない:それはボタンのクリックイベントを発生する前にblurイベントのアクションを遅延

設定タイマーを。

//名前空間は、タイマーのvar SETTIMER = {タイマー:ヌル}のために

$('input,select').blur(function() { 
     setTimer.timer = setTimeout(function() { 
      functionCall(); 
     }, 1000); 
    }); 

    $('input,select').focus(function() { 
     setTimer.timer = setTimeout(function() { 
      functionCall(); 
     }, 1000); 
    }); 

    $("#btn").click(function() { 
     clearTimeout(setTimer.timer); 
     functionCall(); 
    }); 
関連する問題