无论类型如何,获取输入值的通用方法

时间:2011-08-14 20:06:17

标签: javascript jquery forms jquery-validate

我正在尝试编写一个可以与jquery验证插件一起使用的泛型函数,该插件将根据另一个字段的值生成所需的字段。这就是我想要发生的事情:

  • 如果Field 1的值在指定的值数组中(当前使用“No”,“n / a”和“0”进行测试),或者为空,则不执行任何操作。否则,需要使用Field 2.

获取字段1的值是个问题。我没有问题用文本类型或<select>输入来解决这个问题,但我正试图让它与无线电一起工作并遇到困难。以下是我的代码的摘录:

var value = $('[name="option"]').val(),
    empty = ['no', '', 'n/a', '0'];

// If the input is not "empty", make the additional field required
if ($.inArray(value.toLowerCase(), empty) < 0) { // returns -1 if not found
    required = true;
} else {
    required = false;
}

这适用于我需要的所有东西,除了收音机,因为它似乎读取了第一个收音机的值,无论它是否被检查过。

将触发“必需”的字段将是各种文字输入之一(texturlemail等),<select> ,或一组选择的无线电。没有多重选择。我将把这个函数作为参数传递给我的jquery验证配置中的required我想要它应用的每个字段。获得评估的“其他”字段的name属性将可用。

到目前为止,这是我的演示,有点难看,但有注释:http://jsfiddle.net/uUdX2/3/

我尝试了使用is(':checked'):checked选择器的一些不同方法,但它们都失败了。我从演示中删除了它们,因为它们不起作用。

我需要使用无线电文本类型或选择输入,而不知道它将是哪种输入?

2 个答案:

答案 0 :(得分:8)

试试这个

var value = $('[name="option"]');
var type = value.attr("type");

if(type && type.toLowerCase() == 'radio')
  value = value.filter(":checked").val();
else
  value = value.val();

工作demo

答案 1 :(得分:1)

这样的事情:

var value = $('[type="radio"][name="option"]:checked, [type!="radio"][name="option"]', form).val() || '0'

与Shankar相似但在选择器中完全相同。

http://jsfiddle.net/infernalbadger/uUdX2/8/

当没有选择时,它不起作用。当发生这种情况时,不确定你想要它做什么?