2011-08-01 78 views
6

我有一个文本框,它有focusout事件。 只要文本框失去焦点(Tab,鼠标点击表单的任何其他部分),就会根据特定的条件调用用户编写的函数来消除警报。jquery聚焦事件

现在,我的表单也有一个按钮,填充文本框后,当我点击按钮focusOut事件的文本框被调用而不是按钮点击事件。

我该如何停止按钮单击时调用的文本框的foucusout事件?

("$textbox").focusout(function(){ 
validation; 
alert("message"); 
}); 

("$btn").click(function(){ 
---- 
}); 

任何人都可以帮我吗?

+0

你能否提供一些更多的背景?如果这是用于表单验证,那么关于每个文本框的聚焦警报似乎都是不必要的。如果这只是您希望在提交表单之前显示的摘要,还有其他(更好的)方法可以实现此目的。 – Town

+0

这是一些额外的验证,除了在提交表单之前完成对文本框的常规验证。我需要在用户点击或移动到下一个texbox或点击任何其他字段时向用户显示一个confrim框。 –

回答

0

你没有得到focusout事件触发,其次是按钮click事件?

也许alert阻止按钮click完成。

尝试删除alert以测试两个事件是否触发。

更新:

也许mousedown事件会工作,而不是click,因为这对mousedown而不是在mouseup事件click将触发将注册。

+0

嗨,聚焦里面的警报是强制性的。只调用文本框的焦点事件,而不是按钮点击事件。是否有机会停止文本框聚焦事件以停止按钮单击时被调用。 –

+0

问题在于'focusout'会出现在按钮'click'事件的'mousedown'上,但直到发生了可能被警报阻止的'mouseup'事件时才会发生按钮单击。我只建议暂时删除这个以确认是否是问题的原因。 –

+0

我试着用鼠标按下事件,它没有帮助,我仍然可以得到焦点警报..我不希望此警报显示。 –

8

我已经改变了您的点击事件的鼠标按下(所以它首先触发),并使用一个变量来跟踪点击:

var buttonClicked = false; 

$('#txt1').focusout(function(){ 
    if(!(buttonClicked)){ 
     alert('BlurEvent'); 
    }else{ 
     buttonClicked = false; 
    } 
}); 

$('#btn').mousedown(function(event){ 
    alert('ClickEvent'); 
    buttonClicked = true; 
}); 

http://jsfiddle.net/924SZ/

编辑

var buttonClicked = false; 

$('#txt1').focusout(function(){ 
    if(!(buttonClicked)){ 
     // do normal focusout code. 
    }else{ 
     // button was clicked - dont execute some code. 
     buttonClicked = false; 
    } 
    //this always executes regardless of focusout or button click 
    var reply =confirm("Are you happy with the input?"); 
}); 

$('#btn').mousedown(function(event){ 

    buttonClicked = true; 
}); 
+0

嗨,如果你看到你的代码,如果我在txtbox中输入任何东西,并点击按钮,首先调用焦点警报,然后单击事件。我需要的是聚焦事件shud不被称为所有..只有按钮事件shud被称为。 –

+0

因为我们使用'mousedown'事件,所以在'mouseup'后面的'focusout'之前首先调用它。使用一个变量,我们消除了执行中的'focusout'函数。即。如果我们在文本框有焦点时点击按钮,alert('BlurEvent')'不会触发。 – f0x

+0

除了用鼠标点击按钮之外,我们还消除了其他任何操作的能力...... – Town

0

我认为JQuery选择器适用于$。所以海事组织你是这是你在这里做的唯一错误是错误地放置'$'美元符号。

这个怎么样。 (假设TextBoxclass="textbox"Buttonclass='btn'

$(".textbox").focusout(function(){ 
    alert('MsgBox'); 
}); 

$(".btn").click(function(){ 
    alert('Button');  
}); 

更改像下面的选择,如果你有ID s,而不是class

$("#textbox") AND $("#btn") 

http://jsfiddle.net/dAa2R/6/

+0

问题是聚焦仍然导致OPs应用程序弹出。 – f0x