Jquery 将选项动态添加到下拉列表
我有大约25个下拉列表,不想加载所有这些下拉列表,除非用户点击它们。我只想在用户实际单击下拉列表时加载该下拉列表,因为每个下拉列表都与API调用相关联 我有一个错误,下拉列表只在第二次点击后填充,而不是第一次点击。变量有数据,但UI没有反映这一点 有人有什么想法吗?下面是它的外观:Jquery 将选项动态添加到下拉列表,jquery,Jquery,我有大约25个下拉列表,不想加载所有这些下拉列表,除非用户点击它们。我只想在用户实际单击下拉列表时加载该下拉列表,因为每个下拉列表都与API调用相关联 我有一个错误,下拉列表只在第二次点击后填充,而不是第一次点击。变量有数据,但UI没有反映这一点 有人有什么想法吗?下面是它的外观: tr.find("select").click(function () { if ($(this).children().length <= 1) { // checking no of options
tr.find("select").click(function () {
if ($(this).children().length <= 1) { // checking no of options; first one is default
var fieldName = $(this).attr('id');
var selectValues = scope.getFilterData({ fieldName: fieldName }); // get formatted option values
$(this).append(getSelectOptions(selectValues));
} }
});
tr.find(“select”)。单击(函数(){
如果($(this).childrence().length您说您正在进行API调用
我假设getSelectOptions(selectValues)正在这样做
问题是,您正在执行此API调用,但是$(this).append()没有等待它,只是什么也不追加
我认为第二次单击之所以有效,是因为此时调用已经被缓存
在成功调用API后尝试追加。
为了帮助您,我们可能需要您的getSelectOptions函数
您将得到以下结果:
tr.find("select").click(function () {
if ($(this).children().length <= 1) { // checking no of options; first one is default
var fieldName = $(this).attr('id');
var selectValues = scope.getFilterData({ fieldName: fieldName }); // get formatted option values
$.ajax({
... ,
success: function(response) {
$(this).append(response);
}
});
}
});
tr.find(“select”)。单击(函数(){
如果($(this).childrence().length您说您正在进行API调用
我假设getSelectOptions(selectValues)正在这样做
问题是,您正在执行此API调用,但是$(this).append()没有等待它,只是什么也不追加
我认为第二次单击之所以有效,是因为此时调用已经被缓存
在成功调用API后尝试追加。
为了帮助您,我们可能需要您的getSelectOptions函数
您将得到以下结果:
tr.find("select").click(function () {
if ($(this).children().length <= 1) { // checking no of options; first one is default
var fieldName = $(this).attr('id');
var selectValues = scope.getFilterData({ fieldName: fieldName }); // get formatted option values
$.ajax({
... ,
success: function(response) {
$(this).append(response);
}
});
}
});
tr.find(“select”)。单击(函数(){
if($(this).children().length如果等待用户单击,可能已经太晚了。这些选项是在浏览器尝试显示选项后添加的
为了缓解这种情况,请使用在单击之前发生的事件。我建议也使用,以避免过度调用函数,这会使if语句变得不必要
例:
显然,这对触摸屏或用户点击元素没有帮助,但主要的一点是,您需要在选择之前填充它,而不是之后填充它。如果等待用户单击,可能已经太晚了。这些选项是在浏览器尝试显示选项之后添加的
为了缓解这种情况,请使用在单击之前发生的事件。我建议也使用,以避免过度调用函数,这会使if语句变得不必要
例:
显然,这对触摸屏或用户点击元素没有帮助,但主要的一点是,您需要在选择之前填充它,而不是之后填充它。您可以设置一个JSFIDLE来演示问题吗?我怀疑问题出在getSelectOptions
中。是否使用AJAX?然后您需要阅读请参阅jsFiddle:即使是静态值,我也必须单击下拉列表两次才能获得更新的值。你能设置一个JSFIDLE来演示这个问题吗?我怀疑问题出在getSelectOptions
。它是使用AJAX的吗?然后你需要阅读请参见JSFIDLE:即使是静态值,我也必须单击下拉列表两次才能获得更新的值更新的值。假设这不是API调用。这是jsFiddle演示:我想在单击下拉列表时添加这些静态值。在上面的jsFiddle中,我们需要单击两次以查看更新的值。假设这不是API调用。这是jsFiddle演示:我想在我点击下拉菜单。在上面的JSFiddle中,我们需要点击它两次来查看更新的值。YUP你是对的。这是解决这个问题的最好方法吗?似乎是有效的。谢谢输入。@ PrimeSurtha我不知道一个更简单的方法,如果你想使用一个标准的选择。@ PrimeSurtha,如果你的API调用非常快,你可以考虑USI。如果您真的想避免加载选项,请使用ngmousedown
而不是mouseover
。感谢您的提示。它应该相当快,很可能会缓存在客户端和服务器端。您知道除了标准之外,还有任何允许这种功能的下拉选项吗?@PremShrestha严格来说,它不是一个下拉,但我有经验和喜欢。只要有选择就有很多。你是对的。这是解决这个问题的最好方法吗?看起来很有用。谢谢你的输入!@ PrimeSurtha我不知道一个更简单的方法,如果你想使用一个标准的选择。@ PrimeSurtha,如果你的API调用非常快,你可以考虑使用。mousedown
而不是mouseover
,如果你真的想避免加载选项的话。谢谢你的提示。它应该相当快,很可能会缓存在客户端和服务器端。你知道除了标准之外还有允许这种功能的下拉选项吗?@PremShrestha这不是严格意义上的下拉列表,但我有经验和喜欢。只要搜索选项有很多。