【问题标题】:Generic way to get the value of an input regardless of type无论类型如何,获取输入值的通用方法
【发布时间】:2011-08-14 20:06:16
【问题描述】:

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

  • 如果字段 1 的值在指定的值数组中(当前测试为“No”、“n/a”和“0”),或者为空,则不执行任何操作。否则,请将字段 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 等)、&lt;select&gt; 或单选单选集之一.没有多项选择。我将在我希望它应用到的每个字段的 jquery 验证配置中将此函数作为参数传递给 required。被评估的“其他”字段的name 属性对其可用。

这是我目前的演示,有点丑但有注释:http://jsfiddle.net/uUdX2/3/

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

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

【问题讨论】:

    标签: javascript jquery forms jquery-validate


    【解决方案1】:

    试试这个

    var value = $('[name="option"]');
    var type = value.attr("type");
    
    if(type && type.toLowerCase() == 'radio')
      value = value.filter(":checked").val();
    else
      value = value.val();
    

    工作demo

    【讨论】:

    • 我不知道为什么我自己没有想到这个,这很有效。我相信这也适用于多项选择输入,如果我需要的话。有时我们只需要在漫长的一天之后换一双眼睛。非常感谢。
    【解决方案2】:

    类似这样的:

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

    与 Shankar 的非常相似,但都是在选择器中完成的。

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

    未选择任何内容时它不起作用。不确定发生这种情况时您希望它做什么?

    【讨论】:

    • 我尝试了类似的方法,但无法让它工作,但这似乎是另一种好方法(我可能会找出这个小错误)。我喜欢这种方法,因为它使用一个选择器(有点)。编辑:我在演示中留下了一个注释,说明如果未选中任何内容会发生什么:“如果选中“否”或未选中任何内容,则不需要额外的字段。很抱歉没有在我的帖子中澄清。
    • 我已经通过在值行的末尾添加|| '0' 修复了这个小错误。这样,如果它没有找到一个值,它默认为 0,然后将显示消息。
    • 效果很好,希望我能接受这两个答案。我现在正在使用另一种方法,但如果我最终使用你的方法,我对切换接受的答案没有任何疑虑。真的很感激理查德。 ShankarSangoli 的方法真的让我脸红了! (如:为什么我没有想到这个??)
    • 嘿,我一直这样做。您可能过于专注于不直接过滤单选按钮:D
    猜你喜欢
    • 2011-08-19
    • 2015-06-02
    • 2021-09-28
    • 2019-07-15
    • 2019-03-29
    • 2021-06-29
    • 1970-01-01
    • 2018-05-26
    相关资源
    最近更新 更多