jQuery 内部的问题,fn.bind/fn.apply 在可拖动对象上(试图做更好的异常处理)
Posted
技术标签:
【中文标题】jQuery 内部的问题,fn.bind/fn.apply 在可拖动对象上(试图做更好的异常处理)【英文标题】:Problems with jQuery internals, fn.bind/fn.apply on draggables (trying to do better exception handling) 【发布时间】:2011-05-13 19:35:31 【问题描述】:我一直在尝试包装 http://pastebin.com/f579d999d 上看到的 javascript try/catch
它运行良好,它基本上将所有内容都包装在一个 try/catch 中,让您可以捕获如下错误:
$.handleErrors(function(e)
console.log("an error occurred");
console.log(e);
);
(然后我将它发布到服务器)
但是,这不适用于可拖动或可调整大小(但适用于其他所有内容)。如果您开始拖动/调整元素的大小,它不会在鼠标向上时停止(永久拖动)
似乎 ofn.apply() 不适用于可拖动/可调整大小。
具体(缩短):
ofn = fn; wfn = function() ofn.apply(this, arguments); ; fn = wfn;
但对于所有其他事件。
代码块):
$.fn.bind = function(type, data, fn) var ofn, wfn; if (!fn && data && $.isFunction(data)) fn = data; data = undefined; if (fn && type.indexOf("error") === -1) ofn = fn; wfn = function() try ofn.apply(this, arguments); catch(e) handler(e); return false; ; fn = wfn; return jbind.call(this, type, data, fn);
我在这里几乎迷路了,我找不到任何资源说明为什么这不应该工作(我什至找不到任何有同样问题的人)
所以我的问题是:
-
上面的方法看起来是用 jQuery 捕获错误的好方法吗
有没有人遇到过同样的问题(并已解决)
我是否误解了某些东西,我不应该在可拖动事件上调用它
问候, 尼克拉斯
2011-08-28 更新,完整代码(工作)现在是:
jQuery.fn.bind = function( type, data, fn )
if ( !fn && data && typeof data == 'function' )
fn = data;
data = null;
if ( fn )
var origFn = fn;
var wrappedFn = jQuery.proxy(origFn, function ()
try
origFn.apply( this, arguments );
catch ( ex )
return trackError( ex );
);
fn = wrappedFn;
return jQueryBind.call( this, type, data, fn );
;
如果有人对如何改进它有更多提示(原始功能来自http://blogs.cozi.com/tech/2008/04/javascript-error-tracking-why-windowonerror-is-not-enough.html),请在评论中告诉我。
【问题讨论】:
我在bivald.com/jquerydraggable.html 上设置了一个演示(点击,而不是拖动) - 我正在 Chrome 中测试所有内容 【参考方案1】:Re: 1 - 我们做同样的事情,而且看起来效果很好。
回复:2 - 是的。发生的事情是,一旦你包装了原始函数,jQuery UI 就无法取消绑定“mousemove.draggable”。解决方法是在下面添加一行(改编自 jQuery 的代理函数):
// Set the guid of unique handler to the same of original handler, so it can be removed
wfn.guid = ofn.guid = ofn.guid || wfn.guid || jQuery.guid++;
【讨论】:
像魅力一样工作,也找到了第二个解决方案,使用 jQuery.proxyvar wrappedFn = jQuery.proxy(origFn, function ()
Jamey,如果您是blogs.cozi.com/tech/2008/04/… 的评论者(具有相同的头像),您能否分享完整的代码,包括返回修复?
哦,很高兴知道。然后我改用你的功能。再次感谢您!以上是关于jQuery 内部的问题,fn.bind/fn.apply 在可拖动对象上(试图做更好的异常处理)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jquery 选择器获取没有 id 的内部 div
jquery mobile,结合jquery mobile“页面”和内部页面