在尝试从JQuery中的表单元素中打印id值时,为什么会出现“未定义”?

时间:2012-04-18 17:53:32

标签: jquery forms iteration undefined

这是我的表格:

<form action="/Admin/usuarios/obtener_valores" method="POST">
<div class="span-16">
    <input type="hidden" value="1" name="usuarioPinIdHidden" id="usuarioPinIdHidden">
    <table class="summary" style="border: none;">
        <tr>
            <td colspan="2">¿A que edad tuvo sus primeras vacaciones?</td>
        </tr>
        <tr>
            <td colspan="2"><input id="text@&#39;+1+^+1" name="respuesta[0].respuesta" type="text" value=""/></td>
        </tr>
        <tr>
            <td colspan="2">¿Estaba casado en 1991?</td>
        </tr>
        <tr>
            <td colspan="2"><input id="boolean@&#39;+3+^+1" name="respuesta[1].respuesta" type="radio" value="true"/>
                <label for="boolean@'+3+^+1">Si</label>
                <br />
                <input id="boolean@&#39;+3+^+1" name="respuesta[1].respuesta" type="radio" value="false"/>
                <label for="boolean@'+3+^+1">No</label></td>
        </tr>
    </table>
</div>

这是在单击提交按钮后打印所有id值的功能:

$(document).ready(function() {
        $('form').submit(function (){
            return verificarRespuestas();
        });
    });

    function verificarRespuestas(){
        alert('hola');
        $('form').children().each(function(){
            var child = $(this);
            alert(child.id);
        });
        return false;
    }

但这就是它的印刷品:

  • HOLA
  • 未定义
  • 未定义

当我希望得到这些值时:

  • HOLA
  • 文本@'+ 1 + ^ + 1
  • 布尔@'+ 3 + ^ + 1

我做错了什么?

提前致谢!

4 个答案:

答案 0 :(得分:5)

  • children仅选择元素的直接子元素,您希望$('form').find('input')$('form').find('input[id]')仅获取具有ID的内容,或$('form').find('input:visible')仅获取那些是可见的(即,没有隐藏。)
  • 在那里,您可以在this.id中执行each。或者,通过jQuery,$(this).attr('id')
  • 您的ID无效 - 它们不仅包含无效字符,您也无法像第二次输入那样复制它们。所有胡言乱语的重点是什么?

如果您正在进行某种客户端验证或样式化,有很多更智能的方法可以表示输入中的字段类型,最常见的是通过类,还可以通过HTML5中的自定义属性或字段类型。 ID肯定不是您要放置booleanXXX信息的位置。 HTML规范说:

  
    

ID和NAME令牌必须以字母([A-Za-z])开头,后面可以跟任意数量的字母,数字([0-9]),连字符(“ - ”),下划线(“ _“),冒号(”:“)和句号(”。“)。

  

答案 1 :(得分:4)

描述

您应该使用jQuery attr()函数来获取ID。

  

jQuery.attr()获取匹配元素集中第一个元素的属性值。

示例

alert(child.attr('id');

更多信息

答案 2 :(得分:2)

child是一个jquery对象,因此它没有id属性。

你应该用这个:

  $('form').children().each(function(){
        var child = this;
        alert(child.id);

或者这个:

  $('form').children().each(function(){
        var $child = $(this);
        alert(child.attr('id'));

您应该在jQuery变量中添加$的前缀。

阅读本文:
Is there any specific reason behind using $ with variable in jQuery

答案 3 :(得分:1)

注意:您的IDS无效

        $('form input').each(function(){
            alert(this.id);
        });