【问题标题】:if input two input tag have same value then give alert - javascript only no jquery如果输入的两个输入标签具有相同的值,则发出警报 - 仅 javascript 没有 jquery
【发布时间】:2013-07-01 18:49:13
【问题描述】:
<div class="newfile" >
    <ul>
        <li><input value="test1" type="radio" name="abc" onclick="getResults()" /></li>
        <li><input value="test2" type="radio" name ="abc" onclick="getResults()" /></li>
        <li><input value="test1" type="radio" name ="xyz" onclick="getResults()"/></li>
        <li><input value="test2" type="radio" name="xyz" onclick="getResults()"  /></li>

        </ul>
        </div>

这是我现在的 html,如果任何两个具有相同值的单选按钮(如 ="test2" 或 "test1")给我警报

我试图在循环中获得价值

<script>
function getResults() {
    var radios = document.getElementsByTagName("input");

    for (var i = 0; i < radios.length; i++) {       
        if (radios[i].checked) {
            alert(radios[i].value);
            break;
        }
    }
}

</script>

但不知道如何比较两个选中按钮的值并获得警报。

如果有任何两个具有相同值的单选按钮给我警报,我希望不会发生任何事情。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    这有帮助吗?

    function getResults() {
        var radios = document.getElementsByTagName("input");
        var dupDetector = {};
        var value;
    
        for (var i = 0; i < radios.length; i++) {       
            if (radios[i].checked) {
             // value = radios[i].value; // add a prefix to avoid built-in property names
                value = 'I_' + radios[i].value;
                if (dupDetector[value]) { 
                    alert(radios[i].value);
                    return;
                }
                dupDetector[value] = true;
            }
        }
    }
    

    感谢@meiamsome 警告我,如果value 是内置对象属性,则谓词将始终为真,尽管没有重复项。为避免这种情况,请为其添加一个虚拟前缀。

    【讨论】:

    • 如果值是“toString”或“hasOwnProperty”或其他 JavaScript 对象的内置属性之一怎么办?这将在非重复时发出警报。
    • @meiamsome 输入标签的任何值都会是对象而不是字符串吗?
    • @neuront 问题不在于它是一个对象 - 您存储值的方式使用对象dupDetector。因为它是一个对象dupDetector['toString'] 已经被定义,所以如果任何一个单选框的值是'toString',它就会作为重复项发出警报。
    • @meiamsome 对不起,我明白了...如果将谓词更改为 dupDetector[value] === true 会起作用吗?
    • @neuront 在大多数情况下它会解决它,但是它可能是对象的属性是真实的,所以当没有重复时检查它仍然会发出警报。
    【解决方案2】:

    这个怎么样:

    <script type="text/javascript">
    function getResults() {
        var radios = document.getElementsByTagName("input");
        var values = new Array();
        for (var i = 0; i < radios.length; i++) {       
            if (radios[i].checked) {
                var found = false; //Represents if we have a duplicate
                for(var j = 0; j < values.length; j++) { //Loop through previous items
                    if(values[j] == radios[i].value) { //Duplicate?
                        found = true; // Flag it
                        break; //Exit 'j' loop
                    }
                }
                values[values.length] = radios[i].value; //Add value to previous items
                if(!found) continue; //If there was no duplicate, continue to next item
                alert(radios[i].value); //There was a duplicate, alert and return
                break;
            }
        }
    }
    </script>
    

    【讨论】:

      猜你喜欢
      • 2013-07-27
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      • 2012-12-09
      • 2014-05-06
      • 2021-08-02
      • 1970-01-01
      相关资源
      最近更新 更多