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" ); }
希望它对某人有用。