搜索输入的重复值除此之外

时间:2014-05-21 23:04:11

标签: javascript jquery

我在一个中型项目中出现问题。

我已将问题的实质提取到此fiddle 这段代码是什么

$(".6").focusout(function(){

if( $(".6").filter(function(){ return this.value;}).not(this).length>0)

{ $(this).val("duplicated");}

此代码应该做的是获取this.value并在其他输入中搜索它,如果它有效,则提醒用户并防止模糊。挫折是按值搜索(if()),它确实有效。

更新

我在上面做了一个改动:现在事件设置了一个新值,而不是alert()focus()

我注意到"过滤器有一个值"而不是"有价值"。

1 个答案:

答案 0 :(得分:0)

主要问题是过滤器。

.filter(function(){ return this.value;})

jQuery过滤器方法将返回返回值为true的所有jQuery对象。在上面的代码中,每个具有值的输入都将为true。

要解决此问题,请首先保存要修改的当前输入的值,然后将其与元素的每个值进行比较:

$(".6").focusout(function (e) {
    var val = this.value;
    if( $(".6").filter(function(){ return this.value === val;}).not(this).length>0){
        $(this).val("duplicated");
    }
})

一些额外的提示。如果先使用not()方法,则会将过滤查询的数量减少1。

$(".6").focusout(function (e) {
    var val = this.value;
    if( $(".6").not(this).filter(function(){ return this.value === val;}).length>0){
        $(this).val("duplicated");
    }
})

更好的是,您可以使用siblings()选择器来仅选择其他元素。

$(".6").focusout(function (e) {
    var val = this.value;
    if ($(this).siblings(".6").filter(function () { return this.value == val; }).length > 0) {
        $(this).val("duplicated");
    }
})

在这种特殊情况下,您可以省略>0声明中的if

$(".6").focusout(function (e) {
    var val = this.value;
    if ($(this).siblings(".6").filter(function () { return this.value == val; }).length) {
        $(this).val("duplicated");
    }
})

请参阅:http://jsfiddle.net/tleish/VM2fy/4/