0

クラス「.disable」とそれを「.enable」に切り替えるスクリプトを持つアンカータグがあります。

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();
  });
});

ただし、これは機能しません。2 番目のスクリプトは、動的な .class の変更を認識していないようです。上記のコードのクラスを「.disable」に変更すると、機能します。

理由はありますか?

4

2 に答える 2

0

コードが正しく動作しない理由は、コードがページの読み込み時にクラスを持つ要素にのみイベントをアタッチするためです。これはおそらく何もありません。enableしたがって、イベント ハンドラーがアタッチされることはなく、コードは実行されません。クラスの追加/削除でハンドラーを更新するには、.on()(jQuery 1.7+ を使用している.delegate()場合) または (1.7 より古い jQuery を使用している場合) を使用する必要があります。

使用するにはon()

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

使用するにはdelegate()

$(function() {
    $("body").delegate(".enable", "click", function(e) {
        e.preventDefault();
        $("#myform").submit();
    });
});
于 2012-05-27T01:56:16.537 に答える
0

これを試して:

$(document).ready( function(){
  $("#tweet").click( function(e){
    (e).preventDefault();
    if ($(this).hasClass("enable")) {
       $("#myform").submit();
    }
  });
});
于 2012-05-27T01:51:46.213 に答える