使用jQuery将$('body').on('click')与$(window).resize(function()结合使用

8

想知道是否有一种方法将两个不同函数中相同的代码合并成一个函数。

在我的情况下:

jQuery('body').on('click', '.some_div', function (e) {
    // Long and fancy code
});

jQuery(window).resize(function () {
    // Do the same fancy stuff (identical code)
});

2
同时请记住,调整大小函数可能会使您的客户端浏览器变慢/调整大小变得缓慢,参见 此处 的参考信息,了解如何避免这种情况。 - Clemens Himmer
4个回答

15

您可以定义一个函数,在两个事件下都调用它:

function doSomething(e) {
    console.log('Your code here...');
}

jQuery('body').on('click', '.some_div', doSomething);
jQuery(window).resize(doSomething);

请记住,参考this的对象取决于触发的事件,如果在您的doSomething函数中使用,则应考虑这一点。


5
您可以创建一个函数来处理这两个事件,并将此函数引用传递给事件处理程序。
function myHandler(e) {
    // Long and fancy code
}

jQuery('body').on('click', '.some_div', myHandler);

jQuery(window).resize(myHandler);

4

有另外一种方法可以实现。

jQuery('body').on('click', '.some_div', function (e) {
    // Long and fancy code
});

jQuery(window).resize(function () {
    $('.some_div').trigger('click')
});

@Tushar 是的,你抓住我了。 - gaowhen

3
创建一个单独的函数,并从需要的位置调用它:
jQuery('body').on('click', '.some_div', function(e){
    myFunction();
});


jQuery(window).resize(function() {
    myFunction();
});

function myFunction(){
   // Long and fancy code
}

1
为什么要用一个什么都不做的匿名函数来包装对myFunction的调用?你可以直接传递myFunction。 - Racheet
这非常正确,@Racheet...! - vijayP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接