所以我知道 jQuery 的 .on() 函数可以动态添加元素的事件处理程序。
例如我用这种方式
$(document).on("change",Items,function(){/*Code here*/});
但是,一旦将对象附加到文档中,有没有办法使用这个 .on() 函数(或其他东西)来调用函数?我问这个是因为我正在使用一个名为 Chosen 的 jquery 插件,它可以创建更好的选择框,并且它通过使用该行来工作
$(selector).chosen();
但是,如果在将元素附加到文档之前使用该行,则该行不起作用,并且为了我的代码的整洁,如果我可以在添加元素时调用一个函数来运行该行,那就太好了,而不是在我添加元素后添加该行。
编辑:问题不在于添加元素后我不能使用 .chosen() 。因为我可以!我只是希望能够通过不一直隐藏在我的代码底部的 $(selector).chosen() 行来更好地组织我的代码。
我的代码:
//Create the dropdown box for the items
var Items = document.createElement("select");
$(Items).attr( {"id":"Items"} );
$(document).on("change",Items,
function(){
updateHolder(true);
$(InfoBox).trigger("chosen:updated");
setTimeout(
function(){
$(Items).data('chosen').input_blur();
}, 100
);
}
);
//Add items from ED.listOfItems to HTML Items dropdown box
for(var it in ED.listOfItems){
var iKey = ED.listOfItems[it];
var itemOption = document.createElement("option");
if(!Array.isArray(iKey)){
$(itemOption).val(iKey);
$(itemOption).html(iKey.split("_")[0]);
}
else{
$(itemOption).val(iKey[0]);
$(itemOption).html(iKey[1]);
}
$(Items).append( itemOption );
}
/*******Set default to spawn*******/
/**/ ED.objectType = "Spawn"; /**/
/**/ ED.infoType = ""; /**/
/**/ $(Items).val("Spawn"); /**/
/**********************************/
$(MenuBar).append(Items);
$(Items).chosen({disable_search_threshold: 100});
$("#Items_chosen").css({"width":"100px","position":"absolute","left":"5px","top":"20px"});
如您所见,倒数第二行是所选行,但对我来说似乎是不合逻辑的地方。我的代码非常强迫症:P