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