0

ボタンの機能を変更するために、ボタンのクラスと値を変更するだけです。

値とクラスは正常に変更されますが、機能は古いクラスと同じままです。 なぜですか?!

ブラウザはjqueryコードをどこかに保存し、そこからロードしますか?! その場合、どうすれば更新できますか??

これが私のコードの一部です:( 私はhtmlとphpでJquery Ajaxを使用しています)

    var target_button; // global variable to store the target button

    $(".activateButton").click(function(){

        var serial_number = $(target_button).attr("id");
        var cvc = $("#cvc").val();

        $.ajax({
            type: "GET",
            url: '../ajax/tag.php',
            data:
            {
                s: serial_number,
                c: cvc
            }
        }).done(function(data)
            {
                var result = jQuery.parseJSON(data);
                if (result == "1")
                {
                    $("#message").text('Tag Successfully Activated');
                    $("#overlay_form").fadeOut(500);
                    $(target_button).attr("value", "Disable");
                    $(target_button).removeClass("popActivateButton");    //<---------- REPLACING THE CLASS
                    $(target_button).addClass("enableDisableButton");     //<----------

                }

ボタンは次のとおりです。

    if($tags[$i]['Status'] == 1){
        $button = "<input type=\"button\" class=\"enableDisableButton\" id=\"".$tags[$i]['SerialNumber']."\" value=\"Disable\"/>";
    }
    if($tags[$i]['Status'] == 2){
        $button = "<input type=\"button\" class=\"popActivateButton\" id=\"".$tags[$i]['SerialNumber']."\" value=\"Activate\"/>";
    }
4

2 に答える 2

0

セレクターを使用すると、コードの実行時に一致するすべての要素が選択されます。以前に呼び出されたセレクターは、キャッシュされていても、それらに一致する新しい要素がページに追加されたときに動的に更新されません。

イベント ハンドラーを要素にバインドした場合、イベント ハンドラーは次の操作を行うまでそこにとどまります。イベント ハンドラを削除する、または b. 要素を完全に削除します。クラスを変更するだけでは、バインドされているイベント ハンドラーが魔法のように変更されるわけではありません。

代わりにイベント委任を使用することをお勧めします。

$(document).on('click', '.enableDisableButton', function() {
    //your code for enableDisableButton
}).on('click', '.popActivateButton', function() {
    // your code for popActivateButton
});

イベント委譲では、コードの実行時ではなく、イベントがトリガーされたときにセレクターがチェックされるため、ページへの変更反映されます。

document上記のコード例で使用したことに注意してください。ただし、代わりに、イベント ハンドラー関数を実行する要素を含む静的要素 (削除されない要素) のセレクターを使用する必要があります。DOM 構造内で動的要素に近いほど良いです。

于 2013-02-18T11:01:48.020 に答える
0

はい、イベントが割り当てられたら、以前のイベントをクリアして、新しいイベントをそれぞれにバインドする必要があります。

buttonあなたが持っていて、あなたが今イベントを割り当てていると仮定して、click残念ながらあなたはクリアclick eventしたいと思っています。

$(SOMESELECTOR).unbind('previous_event').bind('new_event');
.

詳しくは を検索してjQuery bind and unBindください。

于 2013-02-18T11:05:44.033 に答える