Javascript Jquery运行不正常(没有等待?)

Javascript Jquery运行不正常(没有等待?),javascript,jquery,Javascript,Jquery,以下是我的javascript: $('#Service').val("2"); $("#Service").change(); // Sets new options in subservice. $('#Subservice').val("5"); //EDIT: alert($('#Subservice').length); // Returns 1, when there are far more in it. 服务和子服务是下拉框 在服务更改时,将填充新的子服务列

以下是我的javascript:

  $('#Service').val("2");
  $("#Service").change(); // Sets new options in subservice.
  $('#Subservice').val("5");
  //EDIT:
  alert($('#Subservice').length); // Returns 1, when there are far more in it.
服务和子服务是下拉框

在服务更改时,将填充新的子服务列表

这是设置要编辑的记录的字段。它在我单击编辑按钮时执行。 它设置服务下拉框,然后填充子服务下拉框,然后尝试为其设置正确的下拉选择

但是,未正确设置子维修箱。选项正确,因此
.change()
工作正常,服务设置正确。但是,未设置子服务。其中有一个值为5的条目


我唯一的理由是。改变是开火,但在结束之前继续设置。val。因此,在设置时不存在任何选项。然而,我也不明白为什么会出现线程。因此,我不知道发生了什么或如何修复它。

您是否将代码放入了ready函数中

$(function () {
  $('#Service').val("2");
  $("#Service").change(); // Sets new options in subservice.
  $('#Subservice').val("5");
});

这将等待整个DOM就绪,然后再执行函数中的代码,使服务可用。

您是否将代码放入就绪函数中

$(function () {
  $('#Service').val("2");
  $("#Service").change(); // Sets new options in subservice.
  $('#Subservice').val("5");
});

这将等待整个DOM准备就绪,然后再执行函数中的代码,使#服务可用。

将代码中的最后一行更改为

setTimeout(function(){ 
    $('#Subservice').val("5");
}, 10);

将代码中的最后一行更改为

setTimeout(function(){ 
    $('#Subservice').val("5");
}, 10);

你能制作一个演示吗?事件处理程序很可能仅在当前代码块终止后执行返回1。Aka列表中没有任何内容:oI think@FelixKling可能是正确的,
change
事件处理程序的执行发生在当前代码块完成之后。如果回调函数使用AJAX请求,则肯定是这样。change()事件通过
$.getJSON
与服务器联系。我相信这就是阿贾克斯。但是如果不重写这个事件的填充代码,我不确定如何访问它的回调事件。你能创建一个演示吗?事件处理程序很可能仅在当前代码块终止后执行返回1。Aka列表中没有任何内容:oI think@FelixKling可能是正确的,
change
事件处理程序的执行发生在当前代码块完成之后。如果回调函数使用AJAX请求,则肯定是这样。change()事件通过
$.getJSON
与服务器联系。我相信这就是阿贾克斯。但是如果不重写这一事件的填充代码,我不确定如何访问它的回调事件。为什么?我不是说你不正确(我碰巧认为你是对的),但是如果你不解释问题是什么以及为什么这样做可以解决问题,那么答案真的一文不值。我假设这会在运行前增加10毫秒的延迟?不管是哪种方式,它都不起作用,我会尝试增加延迟。编辑:1000时,它起作用了。这似乎容易出错,这取决于加载所需的时间,并且在大多数情况下会增加不必要的延迟,即加载完成时不会触发,而是在给定时间后触发。为什么?我不是说你不正确(我碰巧认为你是对的),但是如果你不解释问题是什么以及为什么这样做可以解决问题,那么答案真的一文不值。我假设这会在运行前增加10毫秒的延迟?不管是哪种方式,它都不起作用,我会尝试增加延迟。编辑:1000时,它起作用了。这似乎容易出错,具体取决于加载所需的时间,并且在大多数情况下会增加不必要的延迟,即加载完成时不会触发,而是在给定的时间后触发。对不起,我应该更清楚,它在单击编辑按钮时执行。哦,好的,对不起。然后,您应该添加一段代码,或者至少是设置#服务和#子服务的部分。更改事件联系服务器并获取子服务。不确定如何在Javascript/JSFIDLE中对其进行虚拟。这肯定与它没有加载有关,因为延迟响应与第二个延迟一起工作。虽然这不是一个切实可行的解决方案。对不起,我应该说得更清楚一些,它是通过点击编辑按钮来执行的。哦,好的,对不起。然后,您应该添加一段代码,或者至少是设置#服务和#子服务的部分。更改事件联系服务器并获取子服务。不确定如何在Javascript/JSFIDLE中对其进行虚拟。这肯定与它没有加载有关,因为延迟响应与第二个延迟一起工作。但这并不是一个切实可行的解决方案。