0

我在 div 中有一堆输入,我需要选择它们中的每一个并将名称 attr 的值和元素的值添加到数组中,并且由于某种原因,我的单选按钮不会传递值。

所以我有html:

         <div id="form">
            <!-- Meno -->
            <span class="form_element_title">Meno:</span>
            <br />
            <input type="text" name="name" id="" class="form_input_element_text" vtype="vietor"/>
            <br />
            <br />
            <!-- Priezvisko -->
            <span class="form_element_title">Priezvisko:</span>
            <br />
            <input type="text" name="surname" id="" class="form_input_element_text" vtype="vietor"/>
            <br />
            <br />
            <!-- Vek -->
            <span class="form_element_title">Vek:</span>
            <br />
            <input type="text" name="age" id="" class="form_input_element_text" vtype="vietor"/>
            <br />
            <br />
            <!-- Pohlavie -->
            <span>Pohlavie:</span>
            <br />
            <input type="radio" name="sex" id="" value="male" class="" vtype="vietor" checked="checked" />
            <span>Muž</span>
            <br />
            <input type="radio" name="sex" id="" value="female" class="" vtype="vietor" />
            <span>Žena</span>
            <br />
            <br />
            <!-- Pohlavie -->
            <span>Dátum narodenia</span>
            <br />
            <input type="date" name="sex" id="" class="form_input_element_text" vtype="vietor" placeholder="DD/MM/RRRR" />
            <br />
            <br />
            <!-- Adresa -->
            <span>Adresa:</span>
            <br />
            <input type="text" name="adresa" id="" class="form_input_element_text" vtype="vietor"/>
            <br />
            <br />
            <button id="submit_button">Submit</button>
        </div>

和 JS:

var myArray = [];
$( "input" ).each(function( index ) {

        if($(this).attr('type') == 'radio' && $(this).attr('checked') == 'checked'){
            name = $(this).attr('name');
            value = $(this).val();
        } else {
            name = $(this).attr('name');
            value = $(this).val();
        }

        myArray[name] = value;
    });

    console.log(myArray);

我在控制台上得到了什么:

Datum narodenia: "2013-11-12"
adresa: "123 Road"
age: "19"
length: 0
name: "Jakub"
sex: "female"
surname: "Zak"

即使第二个单选按钮,价值=男性,被选中?

4

3 回答 3

1

看看你的if说法。

if($(this).attr('type') == 'radio' && $(this).attr('checked') == 'checked'){

} else {

}

然后 else 本质上意味着“如果类型不是无线电或未检查”。所以未选中的单选按钮将进入 else (与 相同if)。这意味着当这段代码到达时female,它将替换male. 我相信你想忽略未选中的单选按钮,试试这个:

$( "input" ).each(function( index ) {

    if(this.type == 'radio' && !this.checked){
        return true;  // skip to the next iteration of the loop
    }

    /* Add to object */
});   
于 2013-11-02T23:34:15.043 回答
1

您是否意识到您的 if 和 else 语句具有相同的代码?

 name = $(this).attr('name');
 value = $(this).val();

从逻辑上讲,相同的代码将产生相同的结果。

于 2013-11-02T23:42:39.460 回答
0

您的 if 和 else 案例彼此做同样的事情。要仅在选中时获取所有非无线电元素加上无线电的值,请尝试以下操作:

$( "input" ).each(function( index ) {
    if(this.type != 'radio' || this.checked)
       myArray[this.name] = this.value;
});

请注意,您不需要在$(this)任何地方都调用来检索元素值或类型,您可以直接从this.

另请注意,您还有另一个带有 的元素name="sex",该type="date"输入出现在标记中的单选按钮之后。因此,而不是sex: "female"在您的控制台输出中,我希望该日期输入的值覆盖您从单选按钮获得的任何内容。您应该重命名其他输入。

演示:http: //jsbin.com/OJAcaHE/1/edit

最后,请注意数组应该与数字索引一起使用。如果你想拥有字符串键,你应该使用一个对象,即:

myObject = {}
...
myObject[someKey] = someValue;
于 2013-11-02T23:25:36.610 回答