我在一个中型项目中出现问题。
我已将问题的实质提取到此fiddle 这段代码是什么
$(".6").focusout(function(){
if( $(".6").filter(function(){ return this.value;}).not(this).length>0)
{ $(this).val("duplicated");}
此代码应该做的是获取this.value并在其他输入中搜索它,如果它有效,则提醒用户并防止模糊。挫折是按值搜索(if()),它确实有效。
更新
我在上面做了一个改动:现在事件设置了一个新值,而不是alert()
和focus()
我注意到"过滤器有一个值"而不是"有价值"。
答案 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");
}
})