【问题标题】:Make a select refresh while it's open when changed - chrome在更改时打开选择刷新 - chrome
【发布时间】:2014-08-01 01:20:15
【问题描述】:

这在 Firefox 上可以正常工作,但在 Chrome 上却不行。

小提琴示例:http://jsfiddle.net/8Ab6c/1/

setTimeout(function(){
    $('#s1').append("<option>NEW</option>");
},2000);

如果选择框在超时结束时打开,则列表不会更新,直到您关闭并重新打开选择框。有没有办法让它在 Chrome 上更新选择列表仍然打开? (我猜在 IE 上太理想了,虽然这不是必需的)

我可以使用replaceWith 强制取消选择它,但这会产生丑陋的效果,我希望它只是更改列表并保持打开状态。

实际情况是我的选择框正在等待ajax调用,用户很容易在ajax完成之前打开选择框。

【问题讨论】:

  • 它似乎在 Chrome 中对我有用...你能澄清一下你的问题是什么吗?
  • @General_Twyckenham 如果你运行它并立即打开选择,你会在 2 秒后得到“新”条目吗?
  • 它也适用于我的 chrome。哪个版本的 chrome 以及您遇到的问题是什么操作系统?
  • 哦,这是必要的澄清。您希望它在列表打开/活动时更新。
  • @General_Twyckenham 是的,我会进行编辑以使其更清晰

标签: javascript jquery html google-chrome


【解决方案1】:

这有两个部分,您必须在更新下拉菜单时模糊它然后重新打开它。转移焦点很容易,重新打开列表则不然。我使用这种技术https://stackoverflow.com/a/10136523/436036 重新打开它。

var showDropdown = function (element) {
    var event;
    event = document.createEvent('MouseEvents');
    event.initMouseEvent('mousedown', true, true, window);
    element.dispatchEvent(event);
};

setTimeout(function(){
    var focused = false;
    if($('#s1').is(":focus")) {
        $('#s1').blur();
        focused = true;
    }
    $('#s1').append("<option>NEW</option>");
    if(focused) {
        showDropdown($('#s1')[0]);
    }
},4000);

这里是小提琴:http://jsfiddle.net/8Ab6c/2/

【讨论】:

  • 这实际上适用于 Chrome,但不适用于 Firefox,因为模糊适用于两者,但 showDropdown 仅适用于 Chrome。
  • 嗯,默认行为适用于 FF,所以我将检查它是否为 FF。
  • 这工作 jsfiddle.net/Ta5j4/4 。不理想,但由于所有函数都存在于 FF 中(尽管它们会抛出错误),我不能只检查它们是否存在。
  • 评论说这仍然有效,你是一个救生员!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-05
  • 2020-06-07
  • 2019-08-06
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多