2

我有一个下拉<select>元素可以从 50 个状态列表中选择状态,我选择第一个值,保存它,然后在 DOM 中显示该值。我更改并选择了第 5 个值,保存它会显示 DOM 中的值更新。现在回来我选择第二个值,并保存它。它没有将值保存在 DOM 中,而是显示之前选择的第 5 个值。我检查了不同的值,发现在选择任何更高的索引值后,选择返回,更低的值在 DOM 中没有影响,因此我在 POST 中没有得到正确的值。

这是我正在调用的函数change

function updateDOM(inputField) {
    var elementId = inputField;
    if (inputField.type == "select-one") {
       var prev_select = inputField.selectedIndex;
       $('#'+inputField.id+' option').each(
          function() {
             $(this).removeAttr('selected');
          }
       );
       document.getElementById(elementId.id).selectedIndex = prev_select;
       if (browserVersion == 9) {
          document.getElementById(elementId.id)
             .options[prev_select].setAttribute("selected","selected");
       }
       else {
          document.getElementById(elementId.id)
             .options[prev_select].setAttribute("selected","selected");
       }
       document.getElementById(elementId.id).value
          = document.getElementById(elementId.id).options[prev_select].value;
}

的HTML

   <select id="abc"  name="abc"  onchange="javascript:updateDOM(this);" class="required" >
      <option name="" value="" title="null" selected ></option>
      <option name="AK" value="Alaska" title="null"  >Alaska</option>
      <option name="AL" value="Alabama" title="null"  >Alabama</option>
      <option name="AR" value="Arkansas" title="null"  >Arkansas</option>
      <option name="AZ" value="Arizona" title="null"  >Arizona</option>
   </select>
4

1 回答 1

0

首先,你为什么不使用 jQuery 的 ":selected" 选择器呢?另外,你为什么只使用一次 jQuery?我建议以 jQuery 样式执行此操作(抱歉,我不太确定您在代码中到底要做什么):

http://jsfiddle.net/msLXt/1/

PS这些条件有什么区别?

   if (browserVersion == 9) {
      document.getElementById(elementId.id)
         .options[prev_select].setAttribute("selected","selected");
   }
   else {
      document.getElementById(elementId.id)
         .options[prev_select].setAttribute("selected","selected");
   }
于 2012-11-21T16:20:42.267 回答