插件被多次调用的奇怪行为

时间:2013-05-30 07:33:25

标签: jquery plugins jquery-select2

我试图不止一次调用一个插件,它在第一次之后就无法工作了。

奇怪

在我的代码中,我在ul内有一个div

<div id="#optionalSearchOptions"> <ul> </ul> </div>

所以我还有一些其他代码附加到:

$("#optionalSearchOptions ul").append("<li> 
<div class='button' style='position:relative'>
<select id='"+ id+"' style='width:200px'> <option></option></select></div></li>");

这样可以。

因此,要知道何时附加到ul,每次运行追加时都会设置触发器。

$(window).trigger('convertBoxes',[id,title]);

document.ready内我听取了触发器。

$(window).on('convertBoxes', function (event, param1, param2){

  var tmpName = "#" + param1 ;
  newSelect2(tmpName, param2);
});

因此,对于每个新创建的li,都会运行newSelect2函数。

这是函数newSelect2

function newSelect2(id, name) {

    console.log(id);

    $(id).select2({
        placeholder: name
    });

}

这应该为每个新的li运行select2插件 - 但它只是第一次运行它,我不知道为什么。

有人可以帮忙吗?

这是一个js小提琴 - http://jsfiddle.net/dwhitmarsh/MfJ4B/5

尝试添加电影,然后添加另一个

1 个答案:

答案 0 :(得分:2)

你的问题是这段代码:

$("#optionalSearchOptions ul")

在第一个select2作为其标记的一部分创建后,它会添加一个ul。所以现在你的选择器匹配标记select2中的ul,第二个select2在第一个中创建。

相反,你应该说

$("#optionalSearchOptions>ul")

意思是匹配一个ul,它是选项div的直接子节点。或者在ul上抛出一个类,使它不那么脆弱。

看到它与直接子选择器和你的小提琴清理工作: http://jsfiddle.net/MfJ4B/9/

相关问题