我有一个带有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以有效地从源中重新提取(承诺ajax查找,此处未列出的函数...)而不是它现在所做的,这是只需将选项附加到列表中并选择它即可。
我在可能的地方尝试了这个触发代码块,它仍然不会触发。
那么,我如何伪造系统中的onchange?我正在使用jQuery和UI的现代版本(可能是1点发布)
答案 0 :(得分:1)
我认为您在服务器响应之前触发了更改。如果要在之后触发更改,请使用add方法关闭“完成”功能中的对话框。
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" );
});
},
以下是一个示例 - http://jsfiddle.net/AMZ3n/2/