我在 JavaScript 中记录客户端异常。要获得堆栈跟踪,我需要将代码包装在 try/catch 中。
我没有单独包装每个回调,而是尝试使用 jQuery 的.on()
方法来“躲避”。
在大多数情况下它都有效,但由于某种原因,它破坏了我的 jQueryUI 可排序。如果我注释掉以下代码,可排序的工作正常。如何正确拦截on
事件并确保我得到正确的论点和上下文?
if(window.jQuery && jQuery.fn.on){
//keep a reference to the original `on`
var _on = jQuery.fn.on;
//replace `on` with my version
jQuery.fn.on = function() {
//start from the end, looking for the callback
for(var i=arguments.length-1; i>=0; i--){
//is this the function?
if(typeof arguments[i] == 'function'){
//keep a reference to the callback
var func = arguments[i];
//replace the callback
arguments[i] = function(){
try{
//call the original callback
func.apply(this, arguments);
}catch(e){
...
}
};
break;
}
}
//call the original `on` with our new arguments
return _on.apply(this, arguments);
};
}