我有一个带有 onchange 监听器的选择框。当人类使用它时,它可以 100% 发挥作用。
我添加了一个带有 jQueryUI 的模态对话框,以在所述列表上创建一个新选项。这也 100% 有效。
但是,在将所述新选项添加到列表后,我试图“伪造”要触发的更改事件,因此用户不必这样做。它似乎永远不会开火。
我可以这样使用触发器吗?
//##### ADDC ####//
$( "#add" ).click(function(){
$( "#addform" ).dialog({
autoOpen: true,
height: 200,
width: 350,
modal: true,
buttons: {
"Add": function() {
var f = $('#folder').val();
var request = $.ajax({
url: "process.it"
, type: "POST"
, data: { f : f }
});
request.done(function(msg) {
$("#version").append( $('<option></option>').val(msg).html(msg) ).val(msg);
$("#version").focus();
});
$( this ).dialog( "close" );
},
Cancel: function() {
$( this ).dialog( "close" );
}
},
close: function() {
$('#version').trigger('change');
}
});
return false;
});
//###### CHANGE ###############
$('#version').change(function() {
var promise = getFolders(mypath);
promise.success(function (data) {
promise.done(function(msg) {
if(msg=="false"){
//error check
} else {
var myOptions = msg.split(",");
var mySelect = $('#version');
mySelect
.find('option')
.remove()
.end();
$.each(myOptions, function(x,y) {
if(x==0){
x=-1;
y="Select Version";
mySelect.append($('<option></option>').val(x).html(y));
}
else {
mySelect.append($('<option></option>').val(y).html(y));
}
});
mySelect.focus();
}
});
});
});
我已经提取了大量代码,所以如果括号不合适,这里只是拼写错误,以显示函数的核心。同样,除了调用转换器的加法器之外,两者都可以工作:
关键线是:
close: function() {
$('#version').trigger('change');
}
html看起来像
<select id="version"></select> <a href="#" id="add">
当模式关闭(或其他地方)时,我希望它触发 onchange 以有效地从源中重新提取(promise ajax 查找,此处未列出的功能......)而不是它现在所做的,这只是附加选项并选择它。
我已经在可能的地方尝试了这个触发代码块,但它仍然不会触发。
那么,我如何伪造来自系统的 onchange 呢?我正在使用 jQuery 和 UI 的现代版本(也许 1 点发布)