Javascript 在jQuery中将多个事件处理程序绑定到单个元素的最佳方式是什么?

Javascript 在jQuery中将多个事件处理程序绑定到单个元素的最佳方式是什么?,javascript,jquery,formatting,Javascript,Jquery,Formatting,我建议你把它分开。在这种情况下,您将所有内容都放在一个包含很多ifs的大函数中,这不容易阅读(这也使得代码更难维护)。当调用任何事件时,您将执行所有验证,然后执行一段简单的代码 这是一件简单的事情,但如果您仍然对所有代码执行相同的操作,您将真正开始看到问题所在 此外,如果您使用jQuery,它可以确保按照定义的顺序启动处理程序,因此您可以先为所有事件定义clearTimeout,然后编写特定回调。我建议您拆分它。在这种情况下,您将所有内容都放在一个包含很多ifs的大函数中,这不容易阅读(这也使得

我建议你把它分开。在这种情况下,您将所有内容都放在一个包含很多ifs的大函数中,这不容易阅读(这也使得代码更难维护)。当调用任何事件时,您将执行所有验证,然后执行一段简单的代码

这是一件简单的事情,但如果您仍然对所有代码执行相同的操作,您将真正开始看到问题所在


此外,如果您使用jQuery,它可以确保按照定义的顺序启动处理程序,因此您可以先为所有事件定义clearTimeout,然后编写特定回调。

我建议您拆分它。在这种情况下,您将所有内容都放在一个包含很多ifs的大函数中,这不容易阅读(这也使得代码更难维护)。当调用任何事件时,您将执行所有验证,然后执行一段简单的代码

这是一件简单的事情,但如果您仍然对所有代码执行相同的操作,您将真正开始看到问题所在


此外,如果您使用jQuery,它可以确保按照定义的顺序启动处理程序,因此您可以先为所有事件定义clearTimeout,然后编写特定回调。

代码可以简化很多,我觉得很好。看起来很有效。。。为了提高可读性,你只能做这么多。我建议缓存
$('.search\uu champ-list-item\u highlighted')
。否则,这主要是基于观点的,因为这取决于您工作的地方的编码风格。@应该在CodeReview上的Peeper这里声明了
事件
变量?处理程序的参数是事件,但您将其命名为
keyPressed
,因此它应该是
keyPressed.type
@Peeper当我键入答案时,您的问题被搁置,因此我无法发布它,所以我想您可以这样做:代码可以简化,但对我来说很好。看起来很有效。。。为了提高可读性,你只能做这么多。我建议缓存
$('.search\uu champ-list-item\u highlighted')
。否则,这主要是基于观点的,因为这取决于您工作的地方的编码风格。@应该在CodeReview上的Peeper这里声明了
事件
变量?处理程序的参数是事件,但您将其命名为
keyPressed
,因此它应该是
keyPressed.type
@Peeper当我键入答案时,您的问题被搁置,因此我无法发布它,所以我想您可以这样做:一般来说,我们不赞成为那些一开始就不属于这里的问题提供答案,因为这会鼓励更多同样的问题。这些答案会让你落选。但是,你是新来的,我的建议是努力把你的名声提高到40岁,这样你就可以对问题发表评论,这才是这个问题真正应该得到的。@ScottMarcus似乎是个奇怪的问题。他只是询问在jQuery中处理事件的最佳实践。@Ben我们有很多问题需要我们的输入,但堆栈溢出是关于特定问题的特定问题。没有明确答案的问题不是因为堆栈溢出,而是我们有“过于宽泛”和“主要基于观点”的具体密切原因的原因。一般来说,我们不赞成为不属于这里的问题提供答案,因为这会鼓励更多相同的问题。这些答案会让你落选。但是,你是新来的,我的建议是努力把你的名声提高到40岁,这样你就可以对问题发表评论,这才是这个问题真正应该得到的。@ScottMarcus似乎是个奇怪的问题。他只是询问在jQuery中处理事件的最佳实践。@Ben我们有很多问题需要我们的输入,但堆栈溢出是关于特定问题的特定问题。没有明确答案的问题不是因为堆栈溢出,而是我们有“过于宽泛”和“主要基于观点”的具体密切原因的原因。
let typingTimer;

//Detect keyup focusin, focusout and keydown events on the search input and 
//handle them.

$searchInput.on('keyup focusin focusout keydown', (keyPressed) => {
    //Restart the search timer on each event so the server doesnt get 
    //spammed with multiple requests at a time.

    clearTimeout(typingTimer);
    if (event.type == 'keyup' && $searchInput.val() && keyPressed.keyCode >= 65 && keyPressed.keyCode <= 90) {
        //Execute search after certain amount of time.
        typingTimer = setTimeout(searchFunction, debounceTime);
    } else if (!$searchInput.val()) {
        //Empty the search list if user erases everything in the input.
        $searchChampList.empty();
    } else if (event.type == 'focus') {
        //Show the search list if the user clicks on the search input.
        $searchChampList.fadeIn(300);
    } else if (event.type == 'blur') {
        //Hide the search list if the user clicks out of the search input.
        $searchChampList.fadeOut(300);
    } else if (event.type == 'keydown' && $searchInput.val() && keyPressed.keyCode == 40) {
        //Navigate the search list with down arrow and enter the champs name into the input for feedback.
        $('.search__champ-list-item_highlighted').next().addClass("search__champ-list-item_highlighted");
        $('.search__champ-list-item_highlighted').prev().removeClass("search__champ-list-item_highlighted");
        $searchInput.val() == $('.search__champ-list-item_highlighted.search__champ-name').text();
    } else if (event.type == 'keydown' && $searchInput.val() && keyPressed.keyCode == 38) {
        //Same as above but with up arrow.
        $('.search__champ-list-item_highlighted').prev().addClass("search__champ-list-item_highlighted");
        $('.search__champ-list-item_highlighted').next().removeClass("search__champ-list-item_highlighted");
        $searchInput.val() == $('.search__champ-list-item_highlighted.search__champ-name').text();
    } else if (event.type == 'keydown' && $searchChampList.children().length >= 1 && keyPressed.keyCode == 13) {
        //Pressing enter goes to the highlighted champs page.
        window.location.href = $('.search__champ-list-item_highlighted').attr('href');
    }
});
$searchInput.event((handler){
    //code
})