在focus事件中嵌套keypress事件

这是个调用维基百科的测试,我设置了focus,blur,keypress事件,其中keypress是嵌套在focus中的,我的问题操作是:点击input获得焦点,输入任意字符,然后焦点离开input对字符串进行清空,再次点击input输入字符并回车,进行查询操作。
结果是keypress事件触发了两次,我的预期是一次,想求助这是什么原因?

window.onload = function() {
    var input = $('input');
    //查询框获得焦点
    input.focus(function () {
        $('.search').css('background-image', 'initial');
        //回车查询
        input.on('keypress',function(event) {
            if(input.val()) {
                if (event.keyCode === 13) {
                    $('section:nth-child(n+2)').remove();console.log('1');
                    var itemArray = [];
                    var keyword = $(this).val();
                    var html = '';
                    var url = 'https://en.wikipedia.org/w/api.php?action=query&list=search&srsearch=' + keyword + '&prop=info&inprop=url&utf8=&format=json';
                    $.ajax({
                        dataType: 'JSONP',
                        url: url,
                        type: "get",
                        success: function (response) {
                            for (var item in response.query.search) {
                                itemArray.push(response.query.search[item]);
                            }
                            //console.log(itemArray);
                            itemArray.forEach(function (val) {
                                html += '<section><h2>' + val.title + '</h2><p>' + val.snippet + '</p></section>';
                            });
                            $('body').append(html);

                        },
                        error: function (e) {
                            //失败执行
                            alert(e.status + ',' + e.statusText);
                        }
                    });
                }
            }
        });
    });
    input.blur(function () {
        input.val('');
        setTimeout(function(){
            $('.search').css('background-image', 'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAEpElEQVRoQ92a3XEUMQzHpQogjzwRKoBUAKkAUgGXCoAKIBVAKiCpgKQCkgq4DuDeeCNUYOZv5IxOsff8tXd7q5mdXO521/5ZkmXLYuokztELInpJRIdE/jMEn3H9kgvf3cjnW2b//VaFW1oTyLdE9EbASl8H4CsiOt8WfBWwc/SKiD4S+b+9BJo/Y/YWMJoUAYtGPxeArsR8YdZPMykAfDqWxrOBnfMa/TTQ6Wvxz2VKS87RY/FvWAYu+HxM7tAWM51nDlL2bRuBpZPfElqFBr8Q0QUzoZNF4pyf0BZE9J6IHkUehn9D28XvTnVkEFg6BNgw64b3/BUNALZZZFABHQNfEtFxL+gksMD+IPJmqAWmu+jVAf1iafMiYurdoKPAMuLfI5r9wOxNeFRxzs8VmDO0dIFOAQPWhhz4EkZ/K+Kc9+2vprErZjpp6cAD4MTobhU2ACWgm6xsDVjiLPxWS1MDLdrAsxEFYMY+qo3TFtia8jWzXzbuVJzzqy8ds6tN+x5YlosADoLQczjGbFw6ejJ7/zTPIVQVL0M1sNXuTk3ZDkrEtC+Z/cRWJB444rsrZr8KmoxIqMTuSq/InpX6cgBGbH2n6CalXTVrN/czAMM/tEYPpuC7EbNGH7UvY6NyVGKGHDHnSczMKQjnCCuu5+r3IuUAGAt27HGDTNKcB8z6hNlnTbIEwNYvqqb7rNY63OScXxdgBxcEWZKhffpaqwBeC+rMtHGP3KHf1a+IuGBReNo7YAmjTo0Ysp/ZuTUA6xl6cvE3ZgrOURNw9cPVdtn4YCuw9uE7Zjpo7M/oj/cEpqlPWj18GFkMnB4EKQrko6vTNNBjlrb5o9nHYZs7KgrkO9Bw00IJYQlp2D+1cW0HwEhB6Tx5kQuG3ZJNoRTvM7cBHvHfokUH+hiA7QZikmYdWfcXb3QCsN1nIjMILXc702m1AHE9rAr1SUiROd9rWGKbDU+T0nJEu0WbhjDgOokX03J1/rdVo/r5RL68ap6xeWmr5RtmOu7Z+dJ3Jc65qrS7ZtJi1tAyUig6M7hT03bOny/pdGxTvjx2thQ7xNrV2VLsFLEopWMtKnV6aE0bz20VOlFigWofhNBqGToQt4sRNIK6i7Pq1jIeFJ9FUtGeKvxmpicZrxi8ZQgY8Q7QOiWKl41WZSOzMXzWllgECNSSnLZAb6rxADTM+3WkEfgXTKx5cSJaxYl/jrk2QWdlKCNBP/ADFgNSVUmnKvlgvraWBG2gbAnf6/06vq+GzgKWkIVOYWsWKy/CLQhnMHdcSAbi/zURQBSohTqtlOki9KBwxifYnfOD+gCaiLCWLrKwbGBpGKMNs7MFJy1uZZ+9RBsWJAFdXOhSBBx6JgfU8GE76i3gAEUUSFbY9oCuAlbg0DiOPnDFJrZNA3Ar1bTZlXyt0E3AER8NvomfQq20vi3UTcPPcdRZ5H9qoGM+nWXeXYE3qbPn75FTzzBxDpYp7i2wihy2eG1Q03sNXAO998AD0JgvsLNaWw/MAngAGpMifPoeejbAudCzAs6Bnh3wwLr/v3n3jI1TepdsVLDA0Zud5WyBRdPYjWno1ayBFXSo5F/8A9N/2lN2UHxrAAAAAElFTkSuQmCC")');
        }, 200);
    });
}
阅读 2.7k
1 个回答

没有仔细看代码,解决方案:

 input.on('keypress',function(event) {.....

把on前面加个解绑事件

input.off().on('keypress',function(event) {.....

可能有事件外面有循环,先把事件解绑,在进行添加就可以了,请采纳

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题