0

我的 inArray jQuery 验证不起作用:

html:

<input type="text" name="number" class="verify" conditions="requierd numeric"/>
<input type="text" name="number2" class="verify" conditions="requierd string"/>

带有我的 inArray 验证的 jQuery 代码:

    $('input.verify').blur(function(){
        var conditions = $(this).attr('conditions').split(' ');
            if($.inArray('requierd', conditions)){
                alert('ok');
            }
    });

但是当我把=== false我的状况抛在脑后时,它就起作用了!

    $('input.verify').blur(function(){
        var conditions = $(this).attr('conditions').split(' ');
            if($.inArray('requierd', conditions) === false){
                alert('ok');
            }
    });

为什么 ?

谢谢

4

3 回答 3

1

官方文档说:

未找到匹配项时返回 -1。如果数组中的第一个元素与值匹配,则 $.inArray() 返回 0。

因为 JavaScript 将 0 视为松散地等于 false(即 0 == false,但 0 !== false),如果我们要检查数组中是否存在值,我们需要检查它是否不等于(或大于) -1。

于 2012-08-28T14:49:54.827 回答
0

与 同indexOf()$.inArray必须核对-1。否则,如果未找到该元素,它将返回-1哪个是值,即它将您的条件解析为真。

简而言之:

if ($.inArray('something', array) != -1)

请注意,您实际上并不需要拆分条件字符串 - 您可以使用带有单词边界的 REGEX。

if (/\brequired\b/.test($(this).attr('conditions')) { /* code */ }

最后,您应该使用data-属性而不是仅仅发明自定义属性,因为后者会使您的 HTML 无效。

于 2012-08-28T14:49:49.040 回答
0

$.inArray()-1如果未找到该元素,将返回,其计算结果为true. 要么使用:

if (~$.inArray('requierd', conditions))

这将起作用,因为~-1 == 0 == false. 或者,作为替代方案,也是迄今为止最常见的:

if ($.inArray('requierd', conditions) != -1)
于 2012-08-28T14:51:03.113 回答