点击下拉层不会跳转 老师帮我看下代码哪里出问题
来源:2-3 为搜索框添加功能--事件代理和显示隐藏下拉层
琥珀_2020
2020-01-04 17:13:27
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="./css/base.css">
<link rel="stylesheet" href="./css/index.css">
<link rel="stylesheet" href="./css/common.css">
<link rel="stylesheet" href="./font/iconfont.css">
<title>test</title>
</head>
<body>
<div class="header">
<div class="container">
<h1 class="fl"><a href="./index.html" class="header-logo text-hidden">慕课网</a></h1>
<div class="search fl">
<form action="https://s.taobao.com/search">
<input type="text" name="q" placeholder="灵魂没事一元抢" autocomplete="off" class="search-inputbox fl" />
<input type="submit" value="搜索" class="search-btn fl" />
</form>
<ul class="search-layer">
<!-- <li class="search-layer-item text-ellipsis">111</li>
<li class="search-layer-item text-ellipsis">111</li>
<li class="search-layer-item text-ellipsis">111</li> -->
</ul>
</div>
<div class="cart fr"></div>
</div>
</div>
<script src="./js/jquery.js"></script>
<script>
(function ($) {
'use strict'
// 需要用到的变量
var $search = $('.search'),
$form = $search.find('.search-form'),
$input = $search.find('.search-inputbox'),
$btn = $search.find('.search-btn'),
$layer = $search.find('.search-layer');
// 验证(找到触发事件的dom元素,给他绑定事件)
$form.on('submit', function () {
if ($.trim($input.val()) === '') {
return false;
}
})
// 自动完成
$input.on('input', function () {
var url =
'https://suggest.taobao.com/sug?code=utf-8&_ksTS=1578107456706_294&callback=jsonp295&k=1&area=c2c&bucketid=13&q=' +
encodeURIComponent($.trim($input.val()));
$.ajax({
url: url,
dataType: 'jsonp',
}).done(function (data) {
console.log(data);
var html = '',
dataNum = data['result'].length,
maxNum = 5;
if (dataNum === 0) {
$layer.hide().html('');
return;
};
for (var i = 0; i < dataNum; i++) {
if (i >= maxNum) break;
html += '<li class="search-layer-item text-ellipsis"> ' + data['result'][i][
0
] + ' </li>';
};
$layer.html(html).show();
}).fail(function () {
$layer.hide().html('');
}).always(function () {
console.log('why always me!');
});
});
$layer.on('click', '.search-layer-item', function () {
$input.val(removeHtmlTags($(this).html()));
$form.submit();
});
$input.on('focus', function () {
$layer.show();
}).on('click', function () {
return false;
});
$(document).on('click', function () {
$layer.hide();
});
function removeHtmlTags(str) {
return str.replace(/<(?:[^>'"]|"[^"]*"|'[^']*')*>/g, '');
};
})(jQuery);
</script>
</body>
</html>.container {
width: 1200px;
margin: 0 auto;
}
/* ------------------------header---------------------------------------- */
.header {
width: 100%;
height: 124px;
background-color: #f3f5f7;
}
.header-logo,
.header .search,
.header .cart {
margin-top: 36px;
}
.header-logo {
display: block;
width: 136px;
height: 48px;
margin-left: 6px;
background: url('../img/header-logo.png') no-repeat;
}
.header .search {
margin-left: 145px;
}
.search {
position: relative;
border: 1px solid #cfd2d5;
}
.search-inputbox {
width: 585px;
height: 40px;
line-height: 40px;
padding: 0 10px;
border: 1px solid #cfd2d5;
background-color: #fff;
}
.search-btn {
width: 73px;
height: 44px;
line-height: 40px;
border: none;
text-align: center;
cursor: pointer;
color: #fff;
background-color: #07111b;
}
.search-layer {
display: none;
position: absolute;
width: 100%;
top: 100%;
left: -1px;
border: 1px solid #cfd2d5;
background-color: #fff;
}
.search-layer-item {
height: 24px;
line-height: 24px;
padding: 0 10px;
cursor: pointer;
}
.search-layer-item:hover {
background-color: #f3f5f7;
}
点击下拉层不会跳转
2回答
同学你好,运行代码并未出错,只是跳转不成功,应该就是表单提交部分出现了问题,查看同学代码发现,同学没有给表单设置类名:

加上才能获取到表单。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
琥珀_2020
提问者
2020-01-04
莫名其妙
又可以跳转了
/哭笑
---------------------------------------------
另一个小问题
var $search = $('.search'),
$form = $search.find('.search-form'),
$input = $search.find('.search-inputbox'),
$btn = $search.find('.search-btn'),
$layer = $search.find('.search-layer');
$form.on('submit', function () {
if ($.trim($input.val()) === '') {
return false;
}
});
$form = $search.find('.search-form'), 这里在htmll中 没加search-form类
相似问题