jQuery检查<input />是否存在且是否有值

时间:2013-03-18 16:11:41

标签: javascript jquery

我有以下示例:

<input type="text" class="input1" value="bla"/>

有没有办法检查这个元素是否存在并且在一个语句中有值? 或者,至少,任何短于

的东西
if($('.input1').length > 0 && $('input1').val() != '')

在这里遇到长达一英里的条件时,只会感到沮丧。

7 个答案:

答案 0 :(得分:120)

如果输入不存在,则输入将没有值。试试这个......

if($('.input1').val())

答案 1 :(得分:24)

你可以这样做:

if($('.input1').length && $('.input1').val().length)
当值为length时,

false会在条件中评估为0

答案 2 :(得分:13)

您可以这样做:

jQuery.fn.existsWithValue = function() { 
    return this.length && this.val().length; 
}

if ($(selector).existsWithValue()) {
        // Do something
}

答案 3 :(得分:9)

只是为了它,我在jQuery代码中跟踪了这一点。 .val()函数当前从attributes.js的第165行开始。这是相关部分,带有我的注释:

val: function( value ) {
    var hooks, ret, isFunction,
        elem = this[0];

        /// NO ARGUMENTS, BECAUSE NOT SETTING VALUE
    if ( !arguments.length ) {

        /// IF NOT DEFINED, THIS BLOCK IS NOT ENTERED. HENCE 'UNDEFINED'
        if ( elem ) {
            hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];

            if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
                return ret;
            }

            ret = elem.value;

            /// IF IS DEFINED, JQUERY WILL CHECK TYPE AND RETURN APPROPRIATE 'EMPTY' VALUE
            return typeof ret === "string" ?
                // handle most common string cases
                ret.replace(rreturn, "") :
                // handle cases where value is null/undef or number
                ret == null ? "" : ret;
        }

        return;
    }

因此,您将获得undefined""null - 所有这些都会在if语句中评估为false。

答案 4 :(得分:2)

您可以创建自己的自定义选择器 :hasValue,然后使用它来查找,过滤或测试任何其他jQuery元素。

jQuery.expr[':'].hasValue = function(el,index,match) {
  return el.value != "";
};

然后你可以找到这样的元素:

var data = $("form input:hasValue").serialize();

或者使用.is()

测试当前元素
var elHasValue = $("#name").is(":hasValue");

jQuery.expr[':'].hasValue = function(el) {
  return el.value != "";
};


var data = $("form input:hasValue").serialize();
console.log(data)


var elHasValue = $("[name='LastName']").is(":hasValue");
console.log(elHasValue)
label { display: block; margin-top:10px; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form>
  <label>
    First Name:
    <input type="text" name="FirstName" value="Frida" />
  </label>

  <label>
    Last Name:
    <input type="text" name="LastName" />
  </label>
</form>

进一步阅读

答案 5 :(得分:0)

if($('#user_inp').length > 0 && $('#user_inp').val() != '')
{

    $('#user_inp').css({"font-size":"18px"});
    $('#user_line').css({"background-color":"#4cae4c","transition":"0.5s","height":"2px"});
    $('#username').css({"color":"#4cae4c","transition":"0.5s","font-size":"18px"});

}

答案 6 :(得分:-1)

我会这样做:$('input[value]').something。这会查找所有具有值的输入并对其进行操作。