【问题标题】:DropDownList onChange not working at selectedIndex 0DropDownList onChange 在 selectedIndex 0 处不起作用
【发布时间】:2011-03-11 03:55:36
【问题描述】:

好的,我有一个问题,可能很简单。但我似乎无法理解发生了什么。我有 3 个安全问题下拉菜单。我在 ASPX 页面上有 javascript,当您选择一个问题时,它会删除问题/重新填充它们(因此您无法重新选择其他 2 个框中的问题)。当用户使用已选择的问题编辑他们的个人资料时,这非常有效。但是,当用户第一次选择所有三个框在 selectedIndex 0 处列出“请选择一个问题”的问题时,onChange 不会触发。该功能甚至不会去。我认为这与选择索引为 0 的变化有很大关系。我已经调试了这个东西,它甚至没有进入函数。我什至将 onchange 操作设置为闪烁警报。当我尝试从选定的索引 0 执行 onchange 时,似乎出了点问题。有什么想法吗?

【问题讨论】:

  • 如果用户没有改变任何东西,为什么浏览器会触发一个“改变”事件呢?也许我误解了这个问题。
  • 仔细检查您是否订阅
  • 它会在页面加载时启动,因为如果用户已经保存了问题怎么办?这允许从其他 2 中删除下拉项目。这通过一个重新填充列表的函数运行,然后比较每个问题并从每个框中删除适当的问题。但是,由于某种原因,当所选索引为 0 或“请选择一个问题”时,我的 c# 代码上的 onChange 命令不会触发该函数。
  • 嗯,它确实有效,正如您从这个测试页面中看到的那样:gutfullofbeer.net/change-handler.html 您应该发布一些代码。这可能会让别人发现你的问题是什么。
  • 奇怪的是,我什至只用一个简单的警报就测试了 onChange。由于某种原因,它不起作用。如果所有安全问题都设置在索引 0 上并且“请选择安全问题”,它不会发生变化。这是一个简单的测试:securityQuestionDropDown1.Attributes.Add("onChange", "javascript:alert('HELLO');");这甚至不会触发警报。

标签: c# asp.net javascript drop-down-menu


【解决方案1】:

也许我在您所描述的内容中遗漏了一些内容。onChanged 事件只会在 selectedIndex 更改 时触发。因此,如果您在 selectedIndex(0) 处下拉一个下拉列表并重新选择第一项,onChange 将不会触发。

【讨论】:

    【解决方案2】:

    当您重新填充列表时,如果您将索引 0 处的项目(“请选择一个问题”)替换为另一个代表问题的项目,那么您的事件将不会触发。

    要么

    1.您将第一项保留为未选择的索引(因此您的下拉菜单将始终显示“请选择一个问题”并且用户需要更改它)。或者

    2.在重新填充下拉列表后手动触发事件:

    <html>
    <head>
    <script type="text/javascript">
    
    function sOnChange(){
        alert('Changed');
    }
    
    function replaceItems(){
        var dropDown = document.getElementById('s');
        dropDown.innerHTML = "";
        for(var x=0;x<5;x++){
            var opt = document.createElement("option");
            opt.value = x;
            opt.appendChild(document.createTextNode("New options" + (x+1)));
            dropDown.appendChild(opt);
        }
        dropDown.onchange();
    }
    </script>
    </head>
    <body>
        <input type="button" onclick="replaceItems();" value="Replace Items"/>
        <select id="s" onchange="sOnChange()">
            <option>Press the button Please</option>
        </select>
    </body>
    </html>
    

    【讨论】:

      【解决方案3】:

      选择标记的第一个选项(索引 0)默认情况下已被选中。这就是为什么 onChange 事件在再次被选中时不会触发的原因。

      this popular question 的答案可能会有所帮助。要在选择任何选项时触发您的事件,例如,您可以将默认设置更改为“未选择选项”,如下所示:

      document.getElementById("mySelectTagId").selectedIndex = -1;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多