0

当用户单击选择框时,甚至会发生 Ajax。

此事件将选项放入选择框中。

将选项放入选择框中后,用户应该能够单击它们。

在 Chrome 中,当您单击下拉列表时出现“选择一项”,但添加选项后,列表仍然是“选择一项”,用户可以按向下箭头键并选择它,但它没有显示在“选项下拉列表”添加后。

什么神奇的 JS 或 jQuery 会刷新这个下拉列表,而无需在 chrome 中再次单击?

单击该选项时,这是通过 JS 执行的:

secBox = document.getElementById('sel34541_75');
secBox.length = 1;
addOption(secBox, "Option 1", "execPopDrop('sel34541_75', 34541, 'Option 1', 'type1', 'page.php')");
addOption(secBox, "Option 2", "execPopDrop('sel34541_75', 34541, 'Option 2', 'type2', 'page.php')");
addOption(secBox, "Option 3", "execPopDrop('sel34541_75', 34541, 'Option 3', 'type3', 'page.php')");
addOption(secBox, "Option 4", "execPopDrop('sel34541_75', 34541, 'Option 4', 'type4', 'page.php')");

添加选项功能如下所示:

function addOption(selectbox, text, value) {
  selectbox.options[selectbox.options.length]=new Option(text,value);
}

如果我单击然后按向下箭头,我会看到动态选项在那里,但不在可见的列表中。(这同样适用于 IE 和 FF)

如果我点击向下箭头,我会看到动态选项

如果我再次单击它,我会在下拉菜单中看到正确的选项

如果我再次单击它,我会在下拉菜单中看到正确的选项

4

1 回答 1

0

试试这个——适用于所有浏览器——如果你需要对 IE4 的支持,那么你需要在添加选项之前将 1 添加到 options.length ;)

更新此解决方案是针对原始问题

function addOption(selectbox, text, value) {
  selectbox.options[selectbox.options.length]=new Option(text,value);
}

但是,为什么要将那个可怕的字符串添加到选项中?

看起来你会(不寒而栗)EVAL 值中的字符串

为什么不

addOption(secBox, "Option 1", "sel34541_75");

然后在 execPopDrop 中传递选择,那么它将是

function execPopDrop(sel) {
  var val = sel[sel.selectedIndex].value;
  var txt = sel[sel.selectedIndex].text;
  var type="type"+val.split(" ")[1]; // from Option 1
  var parm2 = val.replace(/[sel_]/g,""); // 34541
  // here you have all the stuff you need to do whatever you did before
}
于 2013-02-12T14:28:26.047 回答