完全被难住了。尝试一些非常简单的东西,但它不起作用:
$("input.input1, textarea.input1").focus(function(){
$(this).addClass("input2").removeClass("input1");
});
$("input.input2, textarea.input2").blur(function(){
$(this).addClass("input1").removeClass("input2");
});
基本上模糊没有开火。我点击输入框,框就会改变。我点击远离盒子,什么也没发生。
您需要使用委托处理程序,因为在应用处理程序时输入没有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
。
因为影响的是相同的元素,所以链接起来比较容易:
$("input.input1, textarea.input1").focus(function(){
$(this).addClass("input2").removeClass("input1");
}).blur(function(){
$(this).addClass("input1").removeClass("input2");
});
JS Fiddle demo.
至于为什么你的jQuery不能按原样工作,我不确定,我害怕;不过我怀疑这与选择器有关。
试试下面的代码:
$("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");
});
另外,如果您的元素加载了ajax使用$(document).on(事件,选择器,函数),因为标准的例子。$(选择).click(函数()……
如果使用jQuery,则需要使用.delegate()
;1.7 .
和.on()
如果你是在1.7或更高。
.live()
,因为它太慢了。