2011-12-07 9 views
1

私は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); 
       } 
      } 
     }); 
    }); 

私は$(".submit_add_type").remove();$(this).remove();を変更すると、それは完璧に動作します。何が間違っていますか?

このsubmit_add_typeクラスでは他にもオブジェクトが存在する可能性があり、特定のものだけを削除したいと考えています。

+1

あなたは '[...]'を省略したコードを共有してください。簡単なスニペットが機能するので、それは関係があると思われます。 http://jsfiddle.net/GQ9Z7/1 –

+1

あなたがしようとしていることに何も問題はありません。おそらくコードが実行されないような構文上のエラーやその他のエラーがありますか? – Jon

+0

うまくいくはずです。ここでは謎です:http://jsfiddle.net/BMjrq/あなたの関数内の他のコードは実行されますか? – Interrobang

答えて

4

success関数を入力すると、$(this)text引数になります。以下のようなもののように変更します。

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

    $(_this).remove(); 

    ... 
+0

それは仕事です。ありがとう! :) –

0

あなたが他のいくつかの問題がある上に行く持って、私はjsFiddleでそれをしようとすると、それだけで正常に動作します:http://jsfiddle.net/uLVR5/

それはあなたが.remove()呼び出しの前に起こって物事を持っているように、それは見えますかなりの量?

+0

上記の回答とコメントの違いは何ですか? –

+0

約6分のように見えます。 ;-)申し訳ありませんが、私はそれをコメントとして投稿しておき、他のコメントがあるかどうかを確認する前にページをリフレッシュしてはなりません。 – mbxtr

1

あなたの問題は、$.ajaxコールバック内部thisの値が変化します。あなたは変数としてthisを保存し、それをコールバックの中で使用する必要があります。

var that = this; 

$.ajax({ 
    ... 
    success: function(){ 
     $(that).remove(); 
    } 
}); 
0

"この" "{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); 
       } 
      } 
     }); 
    });