jQuery Blur Fires在href之前

我正在尝试使用Ajax搜索\建议框。 我使用jQuery来处理失去焦点的文本框。 但是,当我点击建议列表中的链接时,jQuery会触发模糊事件,并且不会遵循链接。 这是jQuery代码:

$(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?

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

只是一个概念certificate 。 与往常一样,全局变量都很糟糕。 看一下jQuery的数据API来规避它。

干杯,

我实现自己时使用的方法是添加一点延迟:

 $('#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 } 

试试这段代码:

 $(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:您将需要取消绑定模糊事件并有条件地重新绑定它。 我需要有关您的页面布局的更多信息,以告诉您如何操作

我管理类似的问题(在模糊时使用一些自定义validation器,在点击关闭按钮之前触发了 – 但我想关闭对话框(单击)而没有触发此模糊事件)输入上的代码(带validation器):

  .. $(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 });... 

和其他事件处理程序,如关闭对话框,当我们不想在validation时调用函数时,只需清除validator_timeout以抑制模糊:

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

希望它对某人有用。