2012-05-27 103 views
0

我有一个类标记为“.disable”的锚标记并将其切换为“.enable”。提交表单时jQuery没有识别出动态类更改

if((counter.text() < 140) && (counter.text() >= 0)) { 
    $('#tweet').addClass("enable"); 
    $('#tweet').removeClass("disable"); 
} else { 
    $('#tweet').addClass("disable"); 
    $('#tweet').removeClass("enable"); 
} 

锚点用于提交表单,但仅当类设置为“.enable”时。

$(document).ready(function(){ 
    $(".enable").click(function(e){ 
    (e).preventDefault(); 
    $("#myform").submit(); 
    }); 
}); 

无论如何,这是行不通的。第二个脚本似乎没有认识到动态.class的变化。如果我将上面的代码中的类更改为“.disable”,它将起作用。

任何想法为什么?

+0

能否请您拂去一些HTML?可能会看看。 –

回答

0

试试这个:

$(document).ready(function(){ 
    $("#tweet").click(function(e){ 
    (e).preventDefault(); 
    if ($(this).hasClass("enable")) { 
     $("#myform").submit(); 
    } 
    }); 
}); 
+0

太好了。 :) 这样可行。我现在要用这个解决方案。如果最好使用MC10s解决方案,我可以稍后使用。非常感谢。 – user1405195

0

为什么你的代码是无法正常工作的原因是因为你的代码将事件到具有类enable在页面加载,这很可能是没有的元素。因此,不会有事件处理程序被附加,并且您的代码永远不会运行。为了让您的处理器与你的类的添加/删除更新,你应该使用.on()(如果你使用jQuery 1.7+)或.delegate()(如果你使用jQuery年龄大于1.7):

要使用on()

$(function() { 
    $("body").on("click", ".enable", function(e) { 
     e.preventDefault(); 
     $("#myform").submit(); 
    }); 
}); 

要使用delegate()

$(function() { 
    $("body").delegate(".enable", "click", function(e) { 
     e.preventDefault(); 
     $("#myform").submit(); 
    }); 
}); 
+0

这很有趣。感谢您的解释。不过,我使用的是jQuery 1.7.1,上面的on()不起作用。永远不要,总是使用on()是可取的吗?我应该转换所有适用的jQuery事件吗? – user1405195