【问题标题】:Set dropdown selected value after loading dropdown values in jQuery在jQuery中加载下拉值后设置下拉选择值
【发布时间】:2017-10-29 02:26:04
【问题描述】:

成功加载下拉列表后,我正在尝试在下拉列表中设置所选值。

在设置选定值之后,我正在通过 ajax 或 jQuery 加载下拉列表值,但有时它工作正常,有时它不会设置选定值,因为加载下拉列表的延迟。我也试过 setTimeout 如下,但它不能正常工作:

if($("#ddlToUnit").length>0)
{     
setTimeout($("#ddlToUnit option[value='"+data.Records.GxMovement.ToUnit_v+"']").attr("selected","selected"),1000);
}
else
{ 
$("#ddlToUnit option[value='"+data.Records.GxMovement.ToUnit_v+"']").attr("selected","selected");
}

我想在加载下拉列表后设置选定的值...

谢谢

【问题讨论】:

  • 您需要在 AJAX 调用的 success 回调函数中进行默认选择。这是确保数据已加载的唯一方法,否则您就是在掷骰子(充其量)。
  • 我已经在成功块中使用了上面的代码
  • if 语句的目的是什么,为什么$("#ddlToUnit").length 不总是1?
  • 在 if 语句中我正在检查下拉列表长度是否等于 0 或者它没有绑定任何值。我错误地写了大于号而不是等于
  • 为此目的计算列表,您可能希望使用$("#ddlToUnit option"),但当然必须有比任意等待更好的方法。所以我想我的问题是,如果它在回调函数中,这个列表怎么可能是空的?我需要查看更多代码。您是单独异步填充列表吗?

标签: javascript jquery ajax drop-down-menu selected


【解决方案1】:

这是一种您可以使用setInterval 继续检查元素是否已被填充的方法。第一个setTimeout 函数只是模拟花费 3 秒时间将选项添加到列表中。

setTimeout(function() {
  var newOption = document.createElement('option');
  newOption.innerHTML = 'Option Text';
  document.getElementById('list').appendChild(newOption);
}, 3000);

// Do something only after list is populated
var interval = setInterval(function() {
  if (document.querySelectorAll('#list option').length > 0) {
    console.log('List is definitely populated!');
    clearInterval(interval);
  }
}, 200);
<select id="list">
</select>

【讨论】:

  • 感谢 @snapjs 它正在工作,但有时 document.querySelectorAll('#list option').length 返回 1...
  • 嗯,您可以采用的另一种解决方案是设置一个变量,仅当您需要的所有数据都已完全加载时才设置为 true
  • 但下拉列表动态绑定数据,我不知道列表数
  • 看看绑定列表数据的代码会很有帮助,否则很难知道究竟什么可能表明列表元素绑定完成。
猜你喜欢
  • 2020-12-14
  • 2019-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
相关资源
最近更新 更多