82

我有以下示例:

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

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

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

只是对一英里长的条件感到沮丧。

4

7 回答 7

157

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

if($('.input1').val())
于 2013-03-18T16:14:33.090 回答
35

你可以这样做:

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

length当值为false时,在一个条件下计算为0

于 2013-03-18T16:13:30.370 回答
13

你可以这样做:

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

if ($(selector).existsWithValue()) {
        // Do something
}
于 2013-03-18T16:13:46.727 回答
10

只是为了它,我在 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;
    }

因此,您将得到undefinedor""null-- 所有这些在 if 语句中评估为 false。

于 2013-03-18T16:37:22.743 回答
3

您可以创建自己的自定义选择器 :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>

延伸阅读

于 2018-04-01T21:19:00.757 回答
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"});

}
于 2019-08-08T22:49:42.023 回答
-1

我会做这样的事情:$('input[value]').something。这会找到所有有价值的输入并对它们进行操作。

于 2016-12-26T18:05:33.253 回答