2015-08-31 81 views
0

我已經寫了一個blur()事件來處理文本字段上的焦點輸出事件。代碼看起來像這樣。在jquery中鍵入並關注事件?

$("input[type=text]").blur(function (event) { 
    if(this.value){ 
     //do something 
    } 
    event.originalEvent.handled = true; 
}); 

我有一種情況,文本字段會自動獲得上一頁中文本的焦點。

舉一個例子,在flipkart.com的搜索字段中輸入一些文字,然後點擊搜索。我的event handler必須執行聚焦事件。 (它正確地發生)。

在下一頁中,輸入的文本被預填充到文本字段中,焦點也放在其上。所以在這個頁面中,如果我做了一些動作,文本字段將失去焦點,並再次調用相同的事件。我不需要這樣的事情發生。

有沒有辦法避免這種情況?通過結合兩個事件處理程序?請幫忙。

+0

可以你** $(「#xyz」)。focusout()** –

+0

嘗試''(':text')。on('focus blur',function()...' – Tushar

+0

第一件事是使用文本框id $(「input [type = text]」)。Second t hing是你可以使用SetFocus方法來關注其他元素而不是特定的控件。 – prashant

回答

0

更改您的代碼,以便功能後只綁定到元素用戶明確與元素進行交互,像這樣:

$("input[type=text]").on('keyup keypress change click', function() { 
 
    $("input[type=text]").blur(function(event) { 
 
    if (this.value) { 
 
     //do something 
 
     alert('blur was called after interacting with element'); 
 
    } 
 
    event.originalEvent.handled = true; 
 
    }); 
 
}); 
 
$('#test').focus();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="test" value="some value">

+0

如果頁面本身發生了變化,該怎麼辦?在flipkart的情況下,如果我在主頁中鍵入搜索文本,則在結果頁面中,默認情況下,相同的字段將具有相同的文本並且焦點在其上。 – NaveenBharadwaj

+0

@NaveenBharadwaj是的,但沒有一個會觸發'$(「input [type = text]」)。on('keyup keypress change click'' .... ...除非您將值設置爲頁面後面的方框加載與jQuery像'$(選擇器).val('valueFromPreviousPage');'我懷疑你會這樣做 – DelightedD0D

+0

我只需要改變事件。 – NaveenBharadwaj

0

試試這個:你知道前一頁的文本值,只是將它與當前文本值進行比較,如果兩者相同則不做任何操作。請參見下面的代碼

$(function(){ 
    var prevTextValue = "read your previous text value here"; 
    $("input[type=text]").blur(function (event) { 
     //check if value is not empty and not equal to previous value 
     if(this.value!="" && this.value != prevTextValue){ 
     //do something 
     } 
     event.originalEvent.handled = true; 
    }); 
}); 
+0

如果我想在上一頁輸入搜索字符串,該怎麼辦? – prashant

+0

爲什麼你想要在搜索結果中再次搜索? –

+0

如果搜索類似於帶有jQuery標籤的SO上的最新問題,該怎麼辦?這裏只是扮演惡魔的主張,但這可能是一種情況,你想允許使用相同的參數重新搜索 – DelightedD0D