我使用这个javascript来选择一个特定的选项(选项值在隐藏元素中指定(:
$("select").each(function() {
var id = $(this).attr('id');
var source = 'input:hidden[name=select_'+id+']';
if ($(source).length) {
var selected = $(source).val();
$(this).val(selected).change();
}
});
当选项在HTML源代码中进行硬编码时,这种方法可以很好地工作。
我现在需要用AJAX调用填充选项,我使用以下方法:
select : function(ctrl,id) {
var call = '/'+ctrl+'/'+$("#auth input[name=verify]").val();
$.getJSON(call, function(result) {
$.each(result, function() {
$('#'+id).append($("<option />").val(this.id).text(this.title));
});
});
},
我在页面加载时处理select方法(AJAX(,选项填充得很好。但当我尝试选择所需的选项时,浏览器默认为第一个选项。
我通过在代码周围粘贴一些警报来测试正在发生的事情,如下所示:
alert($(this).val(selected)); // A
alert($(this).val()); // B
$(this).val(selected).change();
alert($(this).val()); // C
当选项被硬编码时,我得到A=3,B=null,C=3,即它有效当通过AJAX填充选项时,我得到A=3,B=null,C=null,即失败
我猜在用AJAX填充选项列表之后,我需要触发某种change((事件。我试过(我知道有点过头了(:
$('#'+id).append($("<option />").val(this.id).text(this.title).change());
&
$('#'+id).append($("<option />").val(this.id).text(this.title)).change();
有什么想法吗?Thx
问题已解决。
尽管我按正确的顺序(理论上(触发了代码,但由于javascript事件驱动的行为,AJAX调用直到我的选择初始化完成后才完成。因此,我将代码移动到AJAX调用中,将所选选项设置为voila。
select : function(ctrl,id) {
var call = '/'+ctrl+'/'+$("#auth input[name=verify]").val();
$.getJSON(call, function(result) {
$.each(result, function() {
$('#'+id).append($("<option />").val(this.id).text(this.title));
});
var source = 'input:hidden[name=select_'+id+']';
if ($(source).length) {
var selected = $(source).val();
$('#'+id).val(selected).change();
}
});