代码之家  ›  专栏  ›  技术社区  ›  fire

jQuery自己的插件帮助-引用错误的元素

  •  1
  • fire  · 技术社区  · 14 年前

    到目前为止,我已经编写了一个类似这样的插件:

    (function($) {
    
        var textarea;
    
        $.fn.bbcode = function(opt) 
        {
            var i = 0;
    
            return this.each(function(i) {
    
                textarea = this;
    
                var strHTML = '<div id="editor" class="editor-instance-' + i + '">';
                strHTML += '<div class="btn bold" title="Bold"></div>';
                strHTML += '<div class="btn italic" title="Italic"></div>';
                strHTML += '<div class="btn underline" title="Underline"></div>';
                strHTML += '<div class="btn link" title="Link"></div>';
                strHTML += '<div class="btn quote" title="Quote"></div>';
                strHTML += '</div>';
    
                $(strHTML).prependTo($(this).parent().parent());
    
                $('div.editor-instance-' + i + ' div').live('click', function(){
                    var type = $(this).attr('class').substr(4);
    
                    switch (type) {
                        case 'bold':
                            simpleReplace('b');
                            break;
                    }
                });
    
            });
        };
    
    
        function simpleReplace(wrapper) {
            $(textarea).val(wrapper);
        }
    
    })(jQuery);
    

    $(document).ready(function(){
        $('.form_add_comment textarea, .form_reply_comment textarea').bbcode({
            start: true
        });
    
    });
    

    我遇到的问题是点击粗体 simpleReplace() 只将第二个textarea的值设置为“b”,而不管我单击第一个textarea时如何。

    textarea

    任何帮助都太好了!

    1 回复  |  直到 14 年前
        1
  •  1
  •   Felix Kling    14 年前

    你是对的, textarea

    $('div.editor-instance-' + i + ' div').live('click', {textarea: this}, function(e){
         var type = $(this).attr('class').substr(4);
    
         switch (type) {
             case 'bold':
                simpleReplace(e.data.textarea, 'b');
                break;
         }
    });
    

    请注意,当前textarea通过event data选项传递给事件处理程序。

    function simpleReplace(element, wrapper) {
        $(element).val(wrapper);
    }
    

    当然你也可以把 simpleReplace for循环中的函数。这样,每个文本区域都有自己的