2014-02-21 95 views
0

我在这里有一个自动完成功能。我需要的是如果在文本框中写入的值与选项值不匹配清除文本框。这是我现在得到的http://jsfiddle.net/qv94t/如果选项值不匹配,文本框自动完成清除

不允许连接值的文本框在选项中。

这里是我的代码在高级

<form id="register_form" name="register_form"> 
<input list="language" id="none"> 
<datalist id="language" name="options"> 
<option value="Alabama">Alabama</option> 
<option value="Alaska">Alaska</option> 
<option value="Arizona">Arizona</option> 
<option value="kansas">kansas</option 
<option value="California">California</option> 
</datalist> 
</form> 

<script> 
var validOptions = $("form#register_form input[name='options']").val(); 
previousValue = ""; 

$('#none').autocomplete({ 
    autoFocus: true, 
    source: validOptions 
}).keyup(function() { 
    var isValid = false; 
    for (i in validOptions) { 
     if (validOptions[i].toLowerCase().match(this.value.toLowerCase())) { 
      isValid = true; 
     } 
    } 
    if (!isValid) { 
     this.value = previousValue 
    } else { 
     previousValue = this.value; 
    } 
}); 
</script> 

谢谢!

回答

2

我认为这是你在找什么:

http://jsfiddle.net/juvian/qv94t/3/

你validOptions是不确定的,所以不能正常工作。

var validOptions =[]; 
$("#language option").each(function(){ 
    validOptions.push($(this).val())  
}); 

希望它有帮助!

+0

也想返回到前一个值,请移除source:validOptions,它不是必需的;) – juvian

+0

就是这样。但是我怎么能摆脱那个项目? – user3318208

+0

只需从自动填充中删除源代码并修复html: http://jsfiddle.net/juvian/qv94t/6/ – juvian

1

摆脱这个代码

if (!isValid) { 
    this.value = previousValue 
} else { 
    previousValue = this.value; 
} 

它是一个制造麻烦

Demo Fiddle

+0

如果当前值不在列表 – vsgoulart

+0

@rex中,他希望返回到先前的值,但如果值与选项值中的值不匹配,则清除文本框的功能将丢失。 – user3318208

+0

@Zeta你明白了。这就是我需要的 – user3318208

0

的只是删除this.value = previousValue

这里更新小提琴,http://jsfiddle.net/qv94t/2/

var validOptions = $("form#register_form input[name='options']").val(); 
previousValue = ""; 

$('#none').autocomplete({ 
    autoFocus: true, 
    source: validOptions 
}).keyup(function() { 
    var isValid = false; 
    for (i in validOptions) { 
     if (validOptions[i].toLowerCase().match(this.value.toLowerCase())) { 
      isValid = true; 
     } 
    } 

    if (!isValid) { 
     //this.value = previousValue 
    } else { 
     previousValue = this.value; 
    } 
}); 

希望这有助于..! :d

+0

如果当前值不在列表中 – user3318208

相关问题