点击下拉层不会跳转 老师帮我看下代码哪里出问题

来源: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;
}

http://img.mukewang.com/climg/5e10572f095f218c25221269.jpg点击下拉层不会跳转

写回答

2回答

好帮手慕粉

2020-01-04

同学你好,运行代码并未出错,只是跳转不成功,应该就是表单提交部分出现了问题,查看同学代码发现,同学没有给表单设置类名:

http://img.mukewang.com/climg/5e1061f209a77e7511690173.jpg

加上才能获取到表单。

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

0

琥珀_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类

0

0 学习 · 14456 问题

查看课程