3-4作业问题
来源:3-4 作业题
是否可以坚持走得更远些
2018-10-23 10:25:01
$(function(){
var searchBtn = $('.header-search').find('button');
var input = $('.header-search-input');
input.on('keyup',function(){
var searchVal = $('.header-search-input').val();
ajax(searchVal);
});
function ajax(searchVal){
$.ajax({
type:'GET',
url:'search.json',
dataType:'json',
success:function(data){
//方法一:如数据过多则不适用
// var result = data[0][0]['Results'][0]['Suggests'];
// var ul = document.createElement('ul');
// $('.list').css({position : 'absolute',top : '33px'});
// $('.list').show();
// if(searchVal === '鞋'){
// $.each(result,function(index,text){
// var li = document.createElement('li');
// var txt = document.createTextNode(text['Txt']);
// li.appendChild(txt);
// ul.appendChild(li);
// })
// $('.list').html(ul);
// }else if(searchVal === '音速3'){
// $.each(result,function(index,text){
// var li = document.createElement('li');
// var txt = document.createTextNode(text['Txt']);
// li.appendChild(txt);
// ul.appendChild(li);
// })
// $('.list').html(ul);
// }else{
// $('.list').html(''); //如不符合则清空
// }
// 方法二:
$.each(data,function(index,result){
if(searchVal === data[index][0]['Query']){
console.log(data[index][0]['Query']);
$('.list').show();
$('.list').css({position : 'absolute',top : '33px'});//设置绝对定位,否则会把下面的内容挤下去
var ul = document.createElement('ul');
$.each(data[index][0]['Results'][0]['Suggests'],function(i,text){
var li = document.createElement('li');
var txt = document.createTextNode(text['Txt']);
li.appendChild(txt);
ul.appendChild(li);
$('.list').html(ul);
})
}
else{
console.log(1);
$('.list').html(''); //不符合条件则清空
}
})
}
});
}
})为什么当我在搜索框输入‘鞋’ 的时候,总会执行一次 else 语句,输入‘音速3’的时候却又不会。我主要是想当输入不符合的条件的时候,就清空li列表,我该怎么修改?
3回答
可以在keyup的事件中先清除一下内容:

自己测试一下。
是否可以坚持走得更远些
提问者
2018-10-23
$(function(){
var searchBtn = $('.header-search').find('button');
var input = $('.header-search-input');
input.on('keyup',function(){
var searchVal = $('.header-search-input').val();
searchAjax(searchVal);
});
searchBtn.on('click',function(){
var searchVal = $('.header-search-input').val();
commodityAjax(searchVal);
})
//商品数据列表
function commodityAjax(searchVal){
$.ajax({
url : 'basketballShoes.json',
type : 'GET',
dataType : 'json',
success : function(data){
var template = $('#basketBallShoes').html();//模板
var commodityContainer = $('.commodityContainer');
commodityContainer.html('');//先清空数据列表
for(var i=0;i<data.length;i++){
if(searchVal === data[i][0]["Query"]){
console.log(data[i][0]["Query"]);
var result = data[i][0]["Results"][0]["Suggests"];
console.log(result);
for(var j=0;j<result.length;j++){
var obj = {
'each Suggests as value i': '',
'/each' : '',
'value.Txt' : result[j].Txt,
'value.num' : result[j].num,
'value.max' : result[j].max,
'value.discount' : result[j].discount,
'value.label' : result[j].label,
'value.shop' : result[j].shop,
'value.image' : result[j].image,
'value.color' : result[j].color,
'value.size' : result[j].size,
'value.nonDiscount' : result[j].nonDiscount
}
console.log(obj);
var html = template;
for(var k in obj){
// html = html.replace('{{'+k+'}}',obj[k]);
var reg = new RegExp("\{\{" + k + "\}\}", 'g');
html = html.replace(reg, obj[k]);
}
commodityContainer.append(html);
}
$('.list').html('');//清除搜索框的下拉列表
}
}
}
})
}
//搜索框下拉列表
function searchAjax(searchVal){
$.ajax({
type:'GET',
url:'search.json',
dataType:'json',
success:function(data){
//方法一:如数据过多则不适用
// var result = data[0][0]['Results'][0]['Suggests'];
// var result1 = data[1][0]['Results'][0]['Suggests'];
// var ul = document.createElement('ul');
// $('.list').css({position : 'absolute',top : '33px'});
// $('.list').show();
// if(searchVal === '鞋'){
// $.each(result,function(index,text){
// var li = document.createElement('li');
// var txt = document.createTextNode(text['Txt']);
// li.appendChild(txt);
// ul.appendChild(li);
// })
// $('.list').html(ul);
// }else if(searchVal === '音速3'){
// $.each(result1,function(index,text){
// var li = document.createElement('li');
// var txt = document.createTextNode(text['Txt']);
// li.appendChild(txt);
// ul.appendChild(li);
// })
// $('.list').html(ul);
// }else{
// $('.list').html(''); //如不符合则清空
// }
// 方法二:
for(var i = 0;i<data.length;i++){
if(searchVal === data[i][0]['Query']){
console.log(data[i][0]['Query']);
$('.list').show();
$('.list').css({position : 'absolute',top : '33px'});//设置绝对定位,否则会把下面的内容挤下去
var ul = document.createElement('ul');
$.each(data[i][0]['Results'][0]['Suggests'],function(i,text){
var li = document.createElement('li');
var txt = document.createTextNode(text['Txt']);
li.appendChild(txt);
ul.appendChild(li);
$('.list').html(ul);
})
}
// else{
// console.log(1);
// $('.list').html(''); //不符合条件则清空
// }
}
}
});
}
})

老师,这样还是无法实现我想要的呀,看上图,当搜索框没有内容了的时候,这个下拉列表的信息还是显示出来了,我是想当内容不匹配的时候就不让它显示出来。如果我在代码的126-129里写上else语句的话,虽然可以实现,但是也会出现你上个回答的那样,当输入是‘鞋’的时候,下拉列表的内容就显示不出来了。请问这个该怎么实现?
好帮手慕星星
2018-10-23
如果在判断前面先使用each方法就会将data中的所有数据都循环,直到数据中的最后一个内容,当输入‘鞋’的时候,开始判断的是鞋,是匹配的内容,但是会继续向下循环,最后一个是‘音速3’与‘鞋’不匹配,所以没有内容展示出来。当输入‘音速3’的时候,循环到最后一个是‘音速3’,内容匹配就会展示出内容。
建议可以使用for循环来完成,参考:

自己可以测试一下,祝学习愉快!
相似问题