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

当您使用选择器时,它会选择在您执行代码时匹配的所有元素。以前称为选择器 - 即使已缓存 -在将匹配它们的新元素添加到页面时不会动态更新。

如果您已将事件处理程序绑定到元素,那么它们将一直留在那里,直到您 a. 删除事件处理程序,或 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 回答