2009-07-07 20 views
1

私はAjax search \ suggestボックスを使用しようとしています。私は、フォーカスを失うテキストボックスを処理するためにjQueryを使用します。しかし、提案リストのリンクをクリックすると、jQueryはブラーイベントを発生させ、リンクは追跡されません。ここでjQueryのコードは次のとおりです。jQuery Blur Fire hires before

$(document).ready(function() { 

    $('#lstxt').click(function() { 
     this.value = ''; 
    }); 
    $('#lstxt').blur(function() { 
     this.value = 'Database Search'; 
     document.getElementById('ls').innerHTML=''; 
     document.getElementById('ls').style.border='0px'; 
    }); 
}); 

は、どのように私は(ID =「ls_table」)リンクが候補リスト内でクリックされている場合、それは.blur発射しないようにできますか?

答えて

0

このコードを試してみてください。

$(document).ready(function() { 

    $('#lstxt').click(function() { 
     this.value = ''; 
     return true; 
    }); 
    $('#lstxt').blur(function() { 
     this.value = 'Database Search'; 
     $('#ls').html('').css('border',"0px"); 
     return true; 
    }); 
}); 

編集:あなたはテキストボックスの外側をクリックした場合 にじみが発生します。 lstxtはテキストボックスですか?

edit2:ぼかしイベントのバインドを解除し、条件付きで再バインドする必要があります。私はどのように行うには、それが

6
var global_switch = false; 
$('#ls_table').hover (
    function() { global_switch = true; }, 
    function() { global_switch = false; } 
) 
$('#lstxt').blur(function() { 
    if (global_switch) { return; } else { ...}); 

これは概念だけの証拠であるあなたを伝えるためにあなたのページのレイアウトについての詳細情報が必要になります。いつものように、グローバル変数は悪いです。それを回避するためにjQueryのdata APIを見てください。

乾杯、

+0

私たちが使った良い提案です、+1;) – Bozho

3

は自分自身を実装するときに私が使用方法は若干の遅延を追加します

$('#lstxt').blur(function(){ 
    setTimeout(function(){ 
     // original blur code here 
    }, 250); 
}); 

絶対にありません(ただし、通常は動作します)最善の解決策を。しかし、Boldewynのソリューションはうまくいくはずです。#ls_tableが割り当てられる前に作成されていると仮定します。あなたが頻繁に#ls_table破壊/作成している場合、あなたは親要素にイベントをバインドすることができます。

// just using the data API for jquery. 
$('#ls').hover(
    function(){ $('#ls').data('autocompleteover', 1); }, 
    function(){ $('#ls').data('autocompleteover', 0); } 
); 
$('#lstxt').blur(function(){ 
    if($('#ls').data('autocompleteover')) 
     return; 
    // original blur code here 
} 
+0

これは正しい方法ではありません。しかし、これまでのところ、hrefを機能させる方法も知っている中で、そこには最良の方法があります –

0

私はクローズボタンをクリックする前に解雇されたブラーのいくつかのカスタムバリデータと同様の問題を(、管理する - しかし、我々は上の関数を呼び出すにしたくない場合は、近くのダイアログのように、

 .. 
     $(this).blur({validators: validators}, function(event){ // blur             
     (function($this){ 
     validator_timeout = setTimeout(function(){ // validator_timeout is global 
      $this.validate(event.data.validators); // do some validation 
     }, 50); // delay just minimum of time, but enough to let other event to be fired 
     }($(this))); // passing $(this) to function 
     });... 

をし、他のイベントハンドラに:私は()バリでの入力に)解雇このblurイベントなし コードをダイアログ(クリック)を閉じたいです妥当性検査を行い、ぼかしを抑制するvalidator_timeoutをクリアする:

click_function = function(){       
     clearTimeout(validator_timeout); 
     $(this).dialog("close"); 
    } 

誰かにとって便利なことを願っています。