2011-08-27 87 views
0

我有這個網站:jQuery插件:失敗上重新安裝插件本身

<div class="item"> 
    <ul> 
     <li><a href="form.php" class="delete">delete</a></li> 
    </ul> 
</div> 

<div class="item"> 
    <ul> 
     <li><a href="form.php" class="delete">delete</a></li> 
    </ul> 
</div> 

<div class="item"> 
    <ul> 
     <li><a href="form.php" class="delete">delete</a></li> 
    </ul> 
</div> 

當你點擊delete按鈕,表格將被載入請您點擊沒有

當您點擊以前的html將被返回。

在這個插件我下面進行的問題,就是你只能點擊delete按鈕向上次,然後阿賈克斯未能在第三時間來工作。

怎麼回事?如何解決這個問題?

您可以在此link上看到此錯誤。

jQuery的:

$(document).ready(function(){ 
    $(".delete").delete_string({targetElement:'.item'}); 
}); 

(function($){ 
    // Attach this new method to jQuery 
    $.fn.extend({ 
     // This is where you write your plugin's name 
     delete_string: function(options) { 
      // Set the default values, use comma to separate the settings, example: 
      var defaults = { 
       targetElement:   '.item-needle', 
       targetSlibing:   false 
      } 

      var options = $.extend(defaults, options); 
      var o = options; 

      // When you create the click function you can assign that element to a variable and reference it within: 
      var $cm = this.click(function(e){ 

       // Set the varible. 
       var object = $(this); 
       var object_path = object.attr('href'); 
       var object_parent = object.parents('ul'); 
       var html_parent = object_parent.html(); 
       var object_superparent = object.parents(o.targetElement); 

       var target_element = object.parents(o.targetElement); 
       var target_slibing = target_element.next(o.targetSlibing); 
       //alert(target_slibing); 

       // Load the form. 
       object_parent.load(object_path, function(){ 

        // Attach click to the no button. 
        $("input[type=button][name=no]",object_parent).click(function(){ 

         // Get the html content back. 
         object_parent.html(html_parent); 

         // Attach the delete plugin back in. 
         $($cm.selector,object_parent).delete_string({targetElement:o.targetElement}); 
         return false; 

        }); 
       }); 
       return false; 
      }); 
     } 
    }); 
})(jQuery); 

的問題就來自這條線,我可以找出:

$($cm.selector,object_parent).delete_string({targetElement:o.targetElement}); 

這將是罰款,如果我只是這樣做,

$($cm.selector).delete_string({targetElement:o.targetElement}); 

但這會附加delete plugin所有其他現有的刪除按鈕屏幕上的,不是嗎?

+0

似乎要刪除從DOM樹中的項目,這將意味着,經過3次點擊,有沒有剩下的東西? – Trefex

+0

在實際情況中有三個以上的項目。實際上該插件最多可以進行兩次點擊,但在第三次點擊時失敗。我已經更新了OP。謝謝。 – laukok

+0

啊,似乎你正在失去元素上的ajax處理程序。不知道爲什麼只發生2次點擊後才發生這種情況,但似乎您可能需要重新註冊Ajax事件($(「。delete」)....) – Trefex

回答

0

當插件建立多個元素,它始終是最好的回報。每$:

(function($){ 
    $.fn.delete_string=function(options){ 
     var defaults={ 
      targetElement:'.item-needle', 
      targetSlibing:false 
     },options=$.extend(defaults,options); 
     return($(this).each(function(){ 
      // Build your plug-in here 
     })); 
    }; 
})(jQuery);