jQuery val()没有处理通过ajax追加的选项
我有一个jQuery / Ajax函数,它将2 附加到
。
function addOption() { var author = $("#authors").val(); $('#books').empty(); $('#books').html('Please Select'); $.ajax({ type: "post", url: "books.php", data: { author:author }, success: function(response){ $('#books').append(response); } }); }
response
回来 –
Book A Book B
现在的books
是 –
Please Select Book A Book B
这很好用。
现在我想在调用addOption()
后使用.val()
设置selected
option
–
$('#authors').change( function(){ addOption(); $('#books').val('bookB'); });
这不会使Book B
被选中。
如果我硬编码.append()
它的工作原理 –
function addOption() { var author = $("#author").val(); $('#books').empty(); $('#books').html('Please Select'); $('#books').append('Book A\nBook B); } $('#authors').change( function(){ addOption(); $('#books').val('bookB'); });
是否有理由不能使用.val()
选择附加在.ajax
函数中的选项,如果我直接附加它可以把它放进去吗?
这是因为AJAX调用是异步的,因此当您尝试选择选项时,它尚未添加到选择中。
在函数中使用回调,以便在响应到达时执行某些操作:
function addOption(callback) { var author = $("#authors").val(); $('#books').empty(); $('#books').html(''); $.ajax({ type: "post", url: "books.php", data: { author:author }, success: function(response){ $('#books').append(response); callback(); } }); }
用法:
$('#authors').change( function(){ addOption(function(){ $('#dropdownB').val('bookB'); }); });
JAX是异步的 ,这意味着当你调用addOption()方法时,它可能(并且可能会)在实际进行Ajax调用之前返回,因此你调用$('#dropdownB').val('bookB');
在触发Ajax回调以附加选项之前。
试着把$('#dropdownB').val('bookB');
进入ajax调用的成功回调,你应该看到它工作。
Ajax是异步的,当您设置值时,没有该值的选项,您可以将代码放入成功回调中。
success: function(response){ $('#books').append(response); // ... }
或者将Ajax请求的async
属性值设置为false
;
这是因为ajax是异步的 。 也就是说,当它返回并将新选项附加到选择列表时,浏览器引擎已经继续并尝试设置该值(尚未添加)。 尝试移动值设置逻辑以作为ajax响应的一部分。
1)你应该把$('#dropdownB').val('bookB');
在ajax调用的成功事件中,因为AJAX是异步的,当您尝试更改所选项时可能无法完成您的请求,因此没有项目可供选择。
2)您附加到#books
但更改#books
的所选项目。 这是两个不同的ID,因此有两个不同的DOM元素。