目前我在窗口调整大小时触发了多个函数:
$(window).resize(checkNav); $(window).resize(checkWidth); $(window).resize(checkSlider);
而我正在寻找的是从同一窗口运行它们调整大小如下:
$(window).resize(checkNav && checkWidth && checkSlider);
我只是不知道写下来!我能找到的最好的方法是在窗口调整大小调用一个函数,然后调用三个,但是想要删除这个中间函数.
谢谢
解决方法
你不能削减中间人.你唯一能做的就是匿名(这是一个词吗?)他让你更容易忘记他:
$(window).resize(function(e) {checkNav(e); checkWidth(e); checkSlider(e); });
实际上,既然我已经深入研究了这个问题,那么我们来寻找一个通用的解决方案:
function serializer() { // arguments is a list of functions var args = Array.prototype.slice.call(arguments,0); // clone the arguments return function() { // arguments are passed by the event system var ret; for (var i=0; i<args.length; i++) { ret = args[i].apply(this,arguments); if (ret === false) return ret; } return ret; }; } function f1(){ console.log(1); } function f2(){ console.log(2); return false; } function f3(){ console.log(3); } // USAGE: document.getElementById('test').addEventListener('click',serializer(f1,f2,f3) ); // or with jQuery: $(window).resize(serializer(f1,f3));
如您所见,当其中一个处理程序返回false时,传播将停止.如果需要,您可以更改它以检查事件的状态,因为它更符合标准.作为一个起点,我会说它非常好.