为什么没有这个警告框我的代码不能工作?

时间:2011-09-19 08:46:58

标签: javascript jquery grails

在我的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>

这是什么交易?

2 个答案:

答案 0 :(得分:1)

您触发的事件已排队,因此如果您没有警报,则在退出该函数之前不会处理该事件。

即使您直接调用代码而不使用事件来触发它,它也会有一个AJAX调用,其中响应由事件处理,因此该事件将排队。

您应该在接收来自AJAX调用的数据的代码中处理警报之后的部分,这当然意味着您必须将所选值存储在某处以便代码可以访问它。

答案 1 :(得分:0)

可能是因为#cargoDestination在您尝试设置值时没有存在(没有警报框),但是如果警报框在屏幕上,当您单击“确定”时将加载/插入?

前几天我遇到了类似的问题......