jQuery blur()不起作用



完全被难住了。尝试一些非常简单的东西,但它不起作用:

$("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(),因为它太慢了。

相关内容

  • 没有找到相关文章

最新更新