Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 将选项动态添加到下拉列表_Jquery - Fatal编程技术网

Jquery 将选项动态添加到下拉列表

Jquery 将选项动态添加到下拉列表,jquery,Jquery,我有大约25个下拉列表,不想加载所有这些下拉列表,除非用户点击它们。我只想在用户实际单击下拉列表时加载该下拉列表,因为每个下拉列表都与API调用相关联 我有一个错误,下拉列表只在第二次点击后填充,而不是第一次点击。变量有数据,但UI没有反映这一点 有人有什么想法吗?下面是它的外观: tr.find("select").click(function () { if ($(this).children().length <= 1) { // checking no of options

我有大约25个下拉列表,不想加载所有这些下拉列表,除非用户点击它们。我只想在用户实际单击下拉列表时加载该下拉列表,因为每个下拉列表都与API调用相关联

我有一个错误,下拉列表只在第二次点击后填充,而不是第一次点击。变量有数据,但UI没有反映这一点

有人有什么想法吗?下面是它的外观:

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。如果您真的想避免加载选项,请使用ng
mousedown
而不是
mouseover
。感谢您的提示。它应该相当快,很可能会缓存在客户端和服务器端。您知道除了标准之外,还有任何允许这种功能的下拉选项吗?@PremShrestha严格来说,它不是一个下拉,但我有经验和喜欢。只要有选择就有很多。你是对的。这是解决这个问题的最好方法吗?看起来很有用。谢谢你的输入!@ PrimeSurtha我不知道一个更简单的方法,如果你想使用一个标准的选择。@ PrimeSurtha,如果你的API调用非常快,你可以考虑使用。
mousedown
而不是
mouseover
,如果你真的想避免加载选项的话。谢谢你的提示。它应该相当快,很可能会缓存在客户端和服务器端。你知道除了标准之外还有允许这种功能的下拉选项吗?@PremShrestha这不是严格意义上的下拉列表,但我有经验和喜欢。只要搜索选项有很多。