javascript - 在用户打开它之前动态地将 <options> 添加到 <select> 元素

标签 javascript jquery

全部,

我正在开发一个网络应用程序。其中一个关键屏幕包含一个相当大的表格 - 通常在 50-100 行之间。

在每一行,我有两个 <select>要素;每个包含 10-30 <option> 的任何地方元素。

如果我要包括所有 <option>每个 <select> 上的元素在每一行上,我最终可能会得到超过 6,000 个元素(100 行 x 2 个选择 x 30 个选项)。

因此,我的计划是将每个选择限制为单个选项(所选选项)。然后,当用户单击选择时,我会使用 JavaScript/jQuery 来填充选项。

然后,在用户关闭选择后,我将删除除所选选项之外的所有选项。

重要的是,我触发了在 focus 上添加选项的 JavaScript 函数事件。

在 Chrome 和 Firefox 中 - 这很好用。

我设置了一个 jsFiddle 来演示:http://jsfiddle.net/j2zfD/

但是,在 IE 中 - 它不能正常工作。最初,当您单击选择时 - 而不是显示菜单 - 它只是聚焦在选择内。如果您再次单击选择,则会显示菜单。我猜测那是因为 IE 试图在 BEFORE 触发 focus 时显示菜单事件。

底线 - 这是 Not Acceptable ,因为您需要点击选择两次以显示选项菜单。

在 iOS 上的 Safari 中,它也有时不能正常工作。 (可能是因为在构建菜单和触发焦点事件之间存在竞争条件...)

我已经尝试将我的逻辑移动到 mousedown事件,但这似乎会导致更多问题,因为 mousedown 不仅会在您单击选择时触发,还会在您单击任何选项时触发。

我猜这种方法(在需要时向选择添加选项)已经成功实现了数千次;我只需要一些关于如何正确执行此操作的建议。

提前致谢!

最佳答案

试试这个:

HTML

<select class="sel">
    <option value="a">Option A</option>
</select>

jQuery

jQuery(document).ready(function($){
    var option={
        "a":"option a",
        "b":"option b",
        "c":"option c"
    };
    $('.sel').on('click',function(){
        $('.sel').html('');
       $.each(option,function(i,n){
          $('.sel').append('<option value='+i+'>'+n+'</option>');
        });

    });
    $('.sel').on('change',function(){
        var selected_val=$(this).val();
        var selected_option=$("option:selected",this).text();
        $('.sel').html('');

          $('.sel').append('<option value='+selected_val+'>'+selected_option+'</option>');

    });

});

这是演示:http://jsfiddle.net/mHGQs/

关于javascript - 在用户打开它之前动态地将 <options> 添加到 <select> 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15283064/

相关文章:

jquery - 如何在单击的任何 HTML 元素中放置微调器

javascript - 如何避免在单个对象中切换多个条件?

javascript - 在 html 中创建范围 slider

jquery 加载函数只获取 div

jquery - 可编辑文本框内的屏蔽输入不起作用

javascript - 如何检查值是否采用首选格式

jquery - 单击链接更改图像

javascript - AngularJS 路由不工作 : no events on link clicks, 没有 $routeParams

javascript - 在 Blogger 中调整 iframe 高度

javascript - 动态显示滚动内的隐藏元素