检索子输入类型的问题。目前返回'undefined'

时间:2011-05-27 15:00:25

标签: jquery forms input

因此,了解我想要实现的目标的最佳方式是查看此演示: live demo

问题是返回的类型是'undefined'而不是'text'。

任何人都可以解释为什么会这样吗?

非常感谢,

4 个答案:

答案 0 :(得分:2)

考虑一下你的代码在做什么:

// for each '.question' element
$(".question").each(function() { 
    // find the 'input' children which are not 'type=hidden'
    var children = $(this).children('input[type != "hidden"]');
    // get the type
    var type = children.attr('type');
}

您有两个question元素。第一个不包含与子选择器匹配的元素(text输入不是直接子项,因为它嵌套在h3中),因此您有一个空数组。

each的第一次迭代中,您尝试从空数组中读取attr('type'),这会给您undefined

each的第二次迭代中,您试图从包含多个元素的数组中读取attr('type')

我认为你要做的事情更像是......

$(".question").each(function(){
    $(this).find('input[type != "hidden"]').each(function() {
         alert($(this).attr("type"));
    });   
});

请注意find通过所有子项进行分析,而不仅仅是children的直接子项。

答案 1 :(得分:1)

问题是,你试图在“.question”div中找到一个非隐藏的输入元素 - child。

但是你的函数没有拾取grand-child元素,在这种情况下就是那个。这就是为什么你得到“未定义”的回应。

答案 2 :(得分:0)

如果您不想更改HTML,则此代码正常运行:

$(".question").each(function(){
        var type = $('input[type != "hidden"]',this).attr("type");
        alert(type);
});

// Or

$(".question").each(function(){
        var type = $(this).find('input[type != "hidden"]').attr("type");
        alert(type);
});

答案 3 :(得分:-1)

这是因为输入type=text位于h3

<h3>The binary language consists of <input type='text' name='response[4][answer]'>digit(s).</h3>

将您的HTML修复为:

<h3>The binary language consists of </h3><input type='text' name='response[4][answer]'>digit(s).

小提琴:http://jsfiddle.net/maniator/Z6jDR/12/