jQuery Blur Fires在href之前

时间:2009-07-07 19:31:19

标签: jquery blur

我正在尝试使用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?

4 个答案:

答案 0 :(得分: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来规避它。

干杯,

答案 1 :(得分: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
}

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

答案 3 :(得分: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
      });...

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

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

希望它对某人有用。