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

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

问题描述:

在我的Grails应用程序的编辑视图之一中,我有几个链接下拉框。当调用编辑视图时,正在编辑的对象的所有值都正确填充,但没有填充下拉框,因为它们通过AJAX通过jQuery的change函数填充。为什么我的代码没有这个警报框工作?

要解决这个问题,我使用了下面的代码,但有一件奇怪的事情。我使用了一个警告框来查看我编写代码时的价值。使用警报框时,所有事情都会按照我的预期发生,但只要我移除警报框,重新选择先前清除的值的代码行就会停止工作。

<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> 

这里的交易是什么?

所触发的排队,所以如果你没有报警,直到退出功能不处理该事件的事件。

即使你直接调用的代码,而无需使用一个事件来触发它,它有一个AJAX调用在响应由一个事件来处理,所以该事件将被排队。

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

+0

我认为我们中的一个人误解了另一个。我知道我触发的更改事件正确完成的事件,因为链中的第二个框具有它应具有的所有值。唯一的问题是在链中的第二个框中没有选择正确的值,而只是说“-Select-”。我的代码的第一行存储正确的选定值,最后一行设置它。 – ubiquibacon

+0

@typoknig:问题在于选择框中的选项在退出该功能之后才会到达那里。当你尝试在最后一行选择其中的一个时,他们还没有。那时存在的所有变化事件都等待处理,然后开始下载值。 – Guffa

+0

我明白了,你现在在说什么。我通过AJAX调用来调整函数以首先读取选择框的值,然后在AJAX调用成功后重新选择该值。 – ubiquibacon

难道这是#cargoDestination在您尝试设置值(不带警告框)的那一刻不存在,但是如果警报框在屏幕上,您将点击“确定”来加载/插入它吗?

我前几天也有类似的问题...