在我的Grails应用程序的一个编辑视图中,我有几个链式下拉框。调用编辑视图时,正在编辑的对象的所有值都会正确填充,但不会填充任何下拉框,因为它们是通过jQuery的change
函数通过AJAX填充的。
为了解决这个问题,我使用了下面的代码,但有一件奇怪的事情。我使用了一个警告框来查看编写代码时的值。通过警报框,一切都按照我的预期发生,但是一旦我删除警报框,重新选择先前清除的值的代码行就会停止工作。
<g:javascript>
$(document).ready(function() {
cargoDestinationValue = $("#cargoDestination\\.id").val(); //Gets value shown in the selection box. This box is second in the chain.
$("#account\\.id ").trigger('change'); //Triggers a change. This box is first in the chain. when a change is detected an AJAX call is made via some other JavaScript and that populates the second selection box in the chain, but doing so clears the selected value.
alert(cargoDestinationValue); //If this is not here the next line does not seem to be doing what it is supposed to do.
$("#cargoDestination\\.id").val(cargoDestinationValue); //This re-selects the value that was previously cleared.
})
</g:javascript>
这是什么交易?
答案 0 :(得分:1)
您触发的事件已排队,因此如果您没有警报,则在退出该函数之前不会处理该事件。
即使您直接调用代码而不使用事件来触发它,它也会有一个AJAX调用,其中响应由事件处理,因此该事件将排队。
您应该在接收来自AJAX调用的数据的代码中处理警报之后的部分,这当然意味着您必须将所选值存储在某处以便代码可以访问它。
答案 1 :(得分:0)
可能是因为#cargoDestination在您尝试设置值时没有存在(没有警报框),但是如果警报框在屏幕上,当您单击“确定”时将加载/插入?
前几天我遇到了类似的问题......