javascript - 如何循环访问页面上的所有单选或复选框输入并返回返回的值的组合?

标签 javascript jquery

我有一组 4 组 radio 输入。我需要循环遍历所有这些并返回用户选择的组合,以便我可以根据组合执行操作。现在我只是使用大量的 if 语句,我知道我做错了。我想循环遍历它们,如果组合 x 返回,那么我可以将显示的图像更改为某个图像,或者如果组合 y 返回,我可以更改为不同的图像。所以我认为我应该做的是为每个可能的结果定义一组已检查的 radio ,然后在循环完成后检查其中一个数组是否为真。如果是,则显示该组合的相应图像。这听起来是正确的方法吗?所以目前我让它循环并返回值。当我检查哥伦比亚广播电台时,我希望 array 等于 array1,它应该提醒我,但事实并非如此。

 <div class="controls">
                <div class="models">
                    <h4>Makes</h4>
                    <form>
                      <input id="coronado" type="radio" name="make" value="stock" checked> Coronado

                      <input id="columbia" type="radio" name="make" value="white"> Columbia
                    </form> 
                </div>
                <div class="models">
                    <h4>Models</h4>
                    <form>
                      <input id="day-cab" type="radio" name="model" value="day-cab" checked> Day Cab
                       <input id="mid-roof" type="radio" name="model" value="mid-roof"> Mid Roof

                      <input id="raised-roof" type="radio" name="model" value="raised-roof"> Raised Roof
                    </form> 
                </div>
                <div class="colors">
                    <h4>Colors</h4>
                    <form>
                      <input id="stock" type="radio" name="color" value="orange" checked> Stock

                      <input id="white" type="radio" name="color" value="white"> White
                    </form> 
                </div>
                <div class="accessories">
                    <h4>Accessories</h4>
                    <form>
                      <input id="stock-wheels" type="radio" name="accessories" value="stock-wheels" checked> Stock Wheels

                      <input id="with-spinners" type="radio" name="accessories" value="spinners"> Spinners
                    </form> 
                </div>

            </div>

var array = [];
var array1 = ["columbia","day-cab","orange","stock-wheels"];
$(':radio').change(function() {
    $(":radio:checked").each(function(i, e)  {
    array[i] = $(this).val();
    });
    if (array == array1) {
        alert(array);
    } 
});

最佳答案

数组实际上只是底层的对象,因此即使比较两个空数组也会返回 false。

var array1 = [];
var array2 = [];
array1 == array2 //evaluates to false

您要么想使用另一个循环来迭代内容并将一个数组的每个内容与另一个数组的内容进行比较(我相信这将是 O(n^2) 时间)。或者,您可以将数组的字符串化版本存储在哈希表上,然后在恒定时间内检查哈希表。另一个好处是您可以将图像存储在同一位置。我相信它将把查找变成一个常数时间操作 O(1)。

var array = [1,2,3,4];
var hashTable = {};
hashTable[JSON.stringify(array)] = (Your image here);

要比较新数组,您只需像普通键值对查找一样查找它即可。

var img = hashTable[array];

关于javascript - 如何循环访问页面上的所有单选或复选框输入并返回返回的值的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33877616/

相关文章:

javascript - 如何在 Angular 2 中绕过路由器

javascript - 在 Openshift 上部署 sails.js

javascript - 如何编写正则表达式来将 XML 节点与大型文本流中的特定文本进行匹配

php - 在 Jquery 中调用 JavaScript 的问题

jquery - 根据输入值检查复选框

javascript - 如何在javascript中找到捏合方向?

类似于 SQL “like” 的 JavaScript 运算符

javascript - jQuery Scroll 事件在没有实际滚动的情况下触发

javascript:在使用文字对象时将属性名称指定为文本有什么优势或区别吗?

javascript - 使用自定义标记而不是默认标记 (Openlayers)