Jquery remove and $(this)


Jquery remove and $(this)

我对remove()方法有问题。我不能移除$(this)对象。我的代码是:

$(".submit_add_type").live("click", function() {
        var parent = $(this).parent();
        var type_value = parent.children('.type_value').val();
        var type_name = parent.children('.type_name').val();
        var parent2 = parent.parent();
        var permission = parent2.attr('id').replace('perm_types_', '');
        $.ajax({
            url: "/admin/ajax/permission_type_add", type: "POST", cache: false,
            data: {
                permission: permission,
                type_value: type_value,
                type_name: type_name,
            },
            success: function(text) {
                if(text.substr(0,2) == "ok") {
                    var id = text.replace('ok|', '');
                    $(this).remove();
                    parent.append('<input class="submit" type="submit" name="" value="edytuj" id="edit_type_'+ id +'" /> <input class="submit delete_type" type="submit" name="" value="usuń" id="delete_type_'+ id +'" />')
                } else {
                    alert(text);
                }
            }
        });
    });

当我改变$(this).remove();$(".submit_add_type").remove();它工作完美。会出什么问题呢?

问题是,这个submit_add_type类可以有其他对象,我只想删除一个特定的

进入success函数后,$(this)成为text参数。把它改成:

$(".submit_add_type").live("click", function() {
    var _this = $(this);
    ...
    $(_this).remove();
    ...

您的问题是this的值在$.ajax回调中发生了变化。您需要将this保存为变量,然后在回调中使用它。

var that = this;
$.ajax({
   ...
   success: function(){
      $(that).remove();
   }
});

你可能会有一些其他问题,当我在jsFiddle中尝试它时,它工作得很好:http://jsfiddle.net/uLVR5/

看起来在。remove()调用之前发生了一些事情,这是一个相当大的数量吗?

"这个"参照对象"{url:"……",数据:"……"}"所以在你放它的地方放"$(this).remove()"是没有意义的。

使用:

$(".submit_add_type").live("click", function() {
        var elem= $(this), parent = elem.parent();
        var type_value = parent.children('.type_value').val();
        var type_name = parent.children('.type_name').val();
        var parent2 = parent.parent();
        var permission = parent2.attr('id').replace('perm_types_', '');
        $.ajax({
            url: "/admin/ajax/permission_type_add", type: "POST", cache: false,
            data: {
                permission: permission,
                type_value: type_value,
                type_name: type_name,
            },
            success: function(text) {
                if(text.substr(0,2) == "ok") {
                    var id = text.replace('ok|', '');
                    elem.remove();
                    parent.append('<input class="submit" type="submit" name="" value="edytuj" id="edit_type_'+ id +'" /> <input class="submit delete_type" type="submit" name="" value="usuń" id="delete_type_'+ id +'" />')
                } else {
                    alert(text);
                }
            }
        });
    });