嘿,伙计们,我很难让我的下拉列表触发器中包含动态创建的值选项。
<label>Year Level Advisory: </label>
<select id="org-subject-advisory-level" name="subject_level">
</select>
<label>Subjects: </label>
<select id="subjects-list">
</select>jquery ajax:
function get_my_advisory(){
$.ajax({
url:'func_students.php',
type:'POST',
dataType:'json',
data:{'func_num':'4'},
success: function (data){
$.each(data, function(i, item) {
var options = "<option value="+data[i].sec_level+">"+data[i].sec_level+"</option>";
$('#org-subject-advisory-level').append(options);
});
}
});
}
get_my_advisory();
$('#org-subject-advisory-level').on("change", function(){
var advisory_year_level = $('#org-subject-advisory-level').val();
alert(advisory_year_level);
$('#subjects-list').html("");
$.ajax({
type:'POST',
url:'add_subject.php',
dataType:'json',
data:{'func_numbr':'9','year_level':advisory_year_level},
success:function (data){
$.each(data, function(i, item) {
html = "<option value="+data[i].subj_id+">"+data[i].subj_name+"</option>";
$('#subjects-list').append(html);
});
}
});
});
$('#org-subject-advisory-level').trigger("change");触发器可以工作,但它在警报时返回空值,我想知道为什么会发生这种情况。希望能得到你们的帮助。我是jquery和php的新手。提前感谢
发布于 2013-01-08 01:46:11
这应该可以很好地工作,但是初始的.trigger (底部的那个)是在加载任何选项之前完成的。在代码到达之前,最初的ajax请求很可能还没有完成。移动
$('#org-subject-advisory-level').trigger("change");在初始ajax调用的success:回调中,追加的第一个<option>值应该是被警告的内容。
发布于 2013-01-08 01:46:16
正如@Ohgodway在评论中提到的那样...大多数情况下,您的ajax调用在触发器被调用之前是不会完成的,所以当附加select选项时,在ajax成功函数中调用您的触发器函数。
试试这个:
$.ajax({
url:'func_students.php',
type:'POST',
dataType:'json',
data:{'func_num':'4'},
success: function (data){
$.each(data, function(i, item) {
var options = "<option value="+data[i].sec_level+">"+data[i].sec_level+"</option>";
$('#org-subject-advisory-level').append(options);
});
$('#org-subject-advisory-level').trigger("change");
}
});发布于 2013-01-08 02:10:51
如上所述,在jQuery ajax的成功回调或完成回调中触发您的更改事件。
但在触发change事件之前,请确保默认情况下选择任何选项。对于某些浏览器,第一个是默认选中的,但对于某些浏览器,没有选择任何内容,这将返回null。所以最好是显式地选择任何选项。喜欢
$('#org-subject-advisory-level').find('option:last').attr('selected',true);此外,我建议您更改您的循环方法,使用原生for循环而不是jquery each。您可以通过优化代码来提高效率,如下所示
$.each(data, function(i, item) {
html = "<option value="+data[i].subj_id+">"+data[i].subj_name+"</option>";
$('#subjects-list').append(html);
});至
var html=[];
for(var i=0; i<data.length; i++){
html.push("<option value="+data[i].subj_id+">"+data[i].subj_name+"</option>");
}
$('#subjects-list').append(html.join(''));https://stackoverflow.com/questions/14201107
复制相似问题