2011-11-28 32 views
4

完全難倒了這裏。 嘗試一些很容易的,但它不工作:jQuery blur()不工作?

$("input.input1, textarea.input1").focus(function(){ 
    $(this).addClass("input2").removeClass("input1"); 
}); 
$("input.input2, textarea.input2").blur(function(){ 
    $(this).addClass("input1").removeClass("input2"); 
}); 

基本上模糊不點火。 我點擊輸入框並改變框。 我點擊遠離箱子,沒有任何反應。 任何幫助,這將是真棒。

+0

firebug中的任何線索?你使用的是什麼版本的jquery? – alonisser

回答

11

你需要使用一個委託處理程序的輸入沒有按」在應用處理程序時,沒有類input2

$(document).on('focus','input.input1, textarea.input1', function() { 
    $(this).addClass('input2').removeClass('input1'); 
}); 
$(document).on('blur','input.input2, textarea.input2', function() { 
    $(this).addClass('input1').removeClass('input2'); 
}); 

但是,有可能有更好的方法來做到這一點。我建議使用第三類來標記需要類切換的輸入,然後在發生事件時切換類。

$('.needsToggle').on('focus blur', function() { 
    $(this).toggleClass('input1 input2'); 
}); 

如果他們總是有input1級開始,你可以用這個來代替needsToggle

+0

真棒,謝謝。不能相信我從來沒有遇到過這個問題。 – 3Dom

+0

這真的很奇怪。這解決了我的問題,我在前面嘗試'(「。」inputelem「)on(」blur「,function(){});'。這對我來說不起作用,即使焦點相同也能正常工作。但是,當我嘗試這樣的:'$(document).on(「blur」,「.inputelem」,function(){});',它工作正常。 on(「blur」,function(){})和$(「inputelem」)之間的差別是什麼?$(document).on(「blur」,「。inputelem」,function(){}); );' – SexyBeast

+0

@SexyBeast不同之處在於後者只適用於已存在的元素,如果刪除並重新創建元素,則需要重新應用元素。前者應用於文檔級別(始終存在),但僅調用如果目標元素與過濾器匹配。在事件處理程序被過濾和應用之前,事件必須一路冒泡到文檔。注意:選擇器可以是文檔以外的東西,但它需要是DOM中不能替換的東西。 – tvanfosson

3

因爲你影響相同的元素,它以鏈比較容易:

$("input.input1, textarea.input1").focus(function(){ 
    $(this).addClass("input2").removeClass("input1"); 
}).blur(function(){ 
    $(this).addClass("input1").removeClass("input2"); 
}); 

JS Fiddle demo。至於爲什麼你的jQuery不能按原樣工作,我不確定,恐怕;我不知道爲什麼你的jQuery不工作,我不確定。儘管我懷疑這與選擇器有關。

1

試試這個代碼:

$("input.input1, textarea.input1").bind('focus blur', function(){ 
    $(this).toggleClass("input2").toggleClass("input1"); 
}); 

如果它不工作,你可能需要使用focusout而不是blur

$("input.input1, textarea.input1").bind('focus focusout', function(){ 
    $(this).toggleClass("input2").toggleClass("input1"); 
}); 
+0

'focusout'事件對我來說是這樣,結合blur絕對確定:) – Flo

0

如果您使用的是jQuery < 1.7,則需要使用.delegate()

.on()如果你在1.7或更高。

請勿使用.live(),因爲它比較慢。

0

此外,如果你的元素加載ajax使用$(document).on(event,selector,function),因爲standart例如。 $(選擇器).click(函數()...將不會工作