Javascript indexof不';直到变量为空或指定值时才更改,即使它应该检查每个keyup事件
我无法在每个键组上更新compatibilityIndex布尔值,因为它所依赖的indexof值只有在其中一个搜索值为空或具有指定值(如“rice”或“red wine”)时才会自动更新。有人知道吗,为什么它会发生,即使它应该在每次按键事件中检查它Javascript indexof不';直到变量为空或指定值时才更改,即使它应该检查每个keyup事件,javascript,indexof,keyup,Javascript,Indexof,Keyup,我无法在每个键组上更新compatibilityIndex布尔值,因为它所依赖的indexof值只有在其中一个搜索值为空或具有指定值(如“rice”或“red wine”)时才会自动更新。有人知道吗,为什么它会发生,即使它应该在每次按键事件中检查它 <div class="row"> <h1 class="big col-xs-12">Prepare your dinner according to the reference of mixing rules to
<div class="row">
<h1 class="big col-xs-12">Prepare your dinner according to the reference of mixing rules to attain the optimum harmony of taste.</h1>
</div>
<hr />
<h2 class="searchQ">Main ingredient</h2>
<input type="text" name="ingredient1" class="search search1" value="">
<hr />
<h2 class="searchQ">Complementary ingredient</h2>
<input type="text" name="ingredient2" class="search search2" value="">
<hr />
<h1>You <span class="can">can</span> mix <span class="searchVal1"></span> <span class="and"></span> <span class="searchVal2"></span> with:</h1>
<ul class="list1"></ul>
<ul class="list2"></ul>
<script>
var redWine = ['Red Wine','Cheese','Cured Meats','Red Meat'];
var rice = ['Rice','White Wine','Chicken'];
var whiteWine = ['White Wine','Chicken','Oyster','Rice'];
var notFound = "Nope, don't think you can eat that";
var search = $('.search');
var search1 = $('.search1');
var search2 = $('.search2');
var search1conv = [];
var search2conv = [];
var compatibilityIndex = false;
var can = $('.can');
var searchVal1 = $('.searchVal1');
var and = $('.and');
var searchVal2 = $('.searchVal2');
var list1 = $('.list1');
var list2 = $('.list2');
function checking(checkedVal, searchConv, list) {
switch ( checkedVal.toLowerCase() ) {
case 'red wine':
case 'wine red':
case 'wine, red':
list.empty();
searchConv = redWine;
for (var i = 1; i < redWine.length; i++) {
list.append('<li>' + redWine[i] + '</li>');
}
break;
case 'rice':
list.empty();
searchConv = rice;
for (var i = 1; i < rice.length; i++) {
list.append('<li>' + rice[i] + '</li>');
}
break;
case 'white wine':
case 'wine white':
case 'wine, white':
list.empty();
searchConv = whiteWine;
for (var i = 1; i < whiteWine.length; i++) {
list.append('<li>' + whiteWine[i] + '</li>');
}
break;
default:
list.empty().append('<h2>' + notFound + '</h2>');
break;
}
}
var compatible = function(ing1, ing2) {
if ( ing1.indexOf(ing2[0]) > -1 && ing2.indexOf(ing1[0]) > -1 ) {
compatibilityIndex = true;
} else {
compatibilityIndex = false;
}
}
var main = function() {
search.keyup(function() {
if (search1.val() != 0 || search2.val() != 0) {
if (search1.val() != 0) {
checking( search1.val() , search1conv , list1 );
} else {
list1.empty();
}
if (search2.val() != 0) {
checking( search2.val() , search2conv , list2 );
} else {
list2.empty();
}
} else {
searchVal1.empty();
searchVal2.empty();
list1.empty();
list2.empty();
}
if (search1.val() != 0 && search2.val() != 0) {
compatible(search1conv, search2conv);
if (compatibilityIndex) {
can.text('can').removeClass('red').addClass('green');
} else {
can.text('can\'t').removeClass('green').addClass('red');
}
searchVal1.text( search1.val() );
and.text('and' + " " + search1conv.indexOf(search2conv[0]) + " " + search2conv.indexOf(search1conv[0]));
searchVal2.text( search2.val() );
} else {
if (search1.val() == 0) {
can.text('can').removeClass('red').removeClass('green');
searchVal1.empty();
and.empty();
} else {
searchVal1.text( search1.val() );
}
if (search2.val() == 0) {
can.text('can').removeClass('red').removeClass('green');
searchVal2.empty();
and.empty();
} else {
searchVal2.text( search2.val() );
}
}
});
}
$(document).ready(main);
</script>
根据混合规则来准备晚餐,以达到最佳的口味和谐。
主要成分
补充成分
您可以与以下内容混合使用:
var redWine=[“红酒”,“奶酪”,“腌肉”,“红肉];
var rice=[‘大米’、‘白葡萄酒’、‘鸡肉’];
var whiteWine=[“白葡萄酒”,“鸡肉”,“牡蛎”,“大米];
var notFound=“不,不要认为你可以吃那个”;
var search=$('.search');
var search1=$('.search1');
var search2=$('.search2');
var search1conv=[];
var search2conv=[];
var相容性指数=false;
变量can=$('.can');
var searchVal1=$('.searchVal1');
var和=$('和');
var searchVal2=$('.searchVal2');
var list1=$('.list1');
var list2=$('.list2');
函数检查(checkedVal、searchConv、list){
开关(checkedVal.toLowerCase()){
“红酒”案例:
“葡萄酒红”案例:
案例“葡萄酒,红色”:
list.empty();
searchConv=红葡萄酒;
对于(变量i=1;i”+红葡萄酒[i]+“”);
}
打破
“大米”一案:
list.empty();
searchConv=大米;
对于(变量i=1;i'+rice[i]+'');
}
打破
“白葡萄酒”案例:
“白葡萄酒”案例:
“白葡萄酒”一案:
list.empty();
searchConv=白葡萄酒;
对于(变量i=1;i”+白葡萄酒[i]+“”);
}
打破
违约:
list.empty().append(“”+notFound+“”);
打破
}
}
var兼容=功能(ing1、ing2){
if(ing1.indexOf(ing2[0])>-1和&ing2.indexOf(ing1[0])>-1){
相容性指数=真;
}否则{
相容性指数=假;
}
}
var main=函数(){
search.keyup(函数(){
如果(search1.val()!=0 | | search2.val()!=0){
如果(search1.val()!=0){
检查(search1.val(),search1conv,list1);
}否则{
list1.empty();
}
如果(search2.val()!=0){
检查(search2.val(),search2conv,list2);
}否则{
list2.empty();
}
}否则{
searchVal1.empty();
searchVal2.empty();
list1.empty();
list2.empty();
}
如果(search1.val()!=0&&search2.val()!=0){
兼容(search1conv、search2conv);
if(相容性指数){
can.text('can').removeClass('red').addClass('green');
}否则{
can.text('can't').removeClass('green').addClass('red');
}
searchVal1.text(search1.val());
和.text('and'+''+search1conv.indexOf(search2conv[0])+''+search2conv.indexOf(search1conv[0]);
searchVal2.text(search2.val());
}否则{
如果(search1.val()==0){
can.text('can').removeClass('red').removeClass('green');
searchVal1.empty();
and.empty();
}否则{
searchVal1.text(search1.val());
}
如果(search2.val()==0){
can.text('can').removeClass('red').removeClass('green');
searchVal2.empty();
and.empty();
}否则{
searchVal2.text(search2.val());
}
}
});
}
$(文件).ready(主);
首先,很抱歉,这并不是对您问题的回答,但当我开始阅读您的代码时,我发现变量和函数中存在大量冗余。这使您的代码更加复杂,调试更加困难。我将从简化代码开始。例如,您不需要checking1和checking2函数——它们都做相同的事情,只是对不同的数据进行操作。通过向函数传递更多数据,两组数据都可以使用一个函数:
function checking(checkedVal, searchConv, list) {
switch ( checkedVal.toLowerCase() ) {
case 'red wine':
case 'wine red':
case 'wine, red':
list.empty();
searchConv = redWine;
for (var i = 1; i < redWine.length; i++) {
list.append('<li>' + redWine[i] + '</li>');
}
break;
case 'rice':
list.empty();
searchConv = rice;
for (var i = 1; i < rice.length; i++) {
list.append('<li>' + rice[i] + '</li>');
}
break;
case 'white wine':
case 'wine white':
case 'wine, white':
list.empty();
searchConv = whiteWine;
for (var i = 1; i < whiteWine.length; i++) {
list.append('<li>' + whiteWine[i] + '</li>');
}
break;
default:
list.empty().append('<h2>' + notFound + '</h2>');
break;
}
}
函数检查(checkedVal、searchConv、list){
开关(checkedVal.toLowerCase()){
“红酒”案例:
“葡萄酒红”案例:
案例“葡萄酒,红色”:
list.empty();
searchConv=红葡萄酒;
对于(变量i=1;i”+红葡萄酒[i]+“”);
}
打破
“大米”一案:
list.empty();
searchConv=大米;
法罗群岛