2011-08-01 115 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