Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery自己的插件帮助-参考错误的元素_Javascript_Jquery - Fatal编程技术网

Javascript jQuery自己的插件帮助-参考错误的元素

Javascript jQuery自己的插件帮助-参考错误的元素,javascript,jquery,Javascript,Jquery,到目前为止,我已经编写了一个如下所示的插件: (function($) { var textarea; $.fn.bbcode = function(opt) { var i = 0; return this.each(function(i) { textarea = this; var strHTML = '<div id="editor" class="editor-in

到目前为止,我已经编写了一个如下所示的插件:

(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);
我遇到的问题是,尽管我单击了第一个文本区域,但单击调用
simpleReplace()
的粗体只会将第二个文本区域的值设置为“b”

我认为
textarea
变量在第二次循环时被覆盖,因此我可能将函数放在了错误的位置


任何帮助都会很好

你说得对,
textarea
被覆盖。解决方案是将当前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通过事件数据选项传递给事件处理程序

然后:



当然,您也可以将
simpleReplace
函数放在for循环中。这样,每个textarea都会获得“自己的”
simpleReplace
函数。但这也会增加内存占用。

没错,
textarea
被覆盖。解决方案是将当前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通过事件数据选项传递给事件处理程序

然后:


当然,您也可以将
simpleReplace
函数放在for循环中。这样,每个textarea都会获得“自己的”
simpleReplace
函数。但这也会增加内存占用

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