Плагин jQuery: не удается повторно подключить сам плагин - PullRequest
0 голосов
/ 27 августа 2011

У меня есть этот HTML:

<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 нажмите кнопку до два раза, тогда ajax не будет работать в третье время.

Почему?Как решить эту проблему?

Вы можете увидеть эту ошибку на этой ссылке .

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 к всем остальнымсуществующая кнопка удаления на экране, не так ли?

1 Ответ

0 голосов
/ 03 марта 2012

При создании плагина для нескольких элементов всегда лучше возвращать $ .each:

(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);
...