Splitter.js不适用于新版本的jQuery

I'm using Splitter.js in a project. 

代码来自http://methvin.com/splitter/具体的JS位于http://methvin.com/splitter/splitter.js

使用jQuery v1.5.2时,代码可以正常工作。

当我转到jQuery v1.7.2时,代码失败,并给出“Too Much recursion”错误。 当我使用jQuery 1.6.2时,这似乎也会发生

有人有解决方法吗?

我确实在https://bungeni-exist.googlecode.com/svn-history/r188/xq-framework/trunk/db/framework/assets/bungeni/scripts/splitter上找到了(更新的)版本的splitter.js 。 js但这似乎没有解决问题。

任何意见,将不胜感激。

我遇到了同样的问题。 在splitter.js文件中查看了一段时间之后,我遇到了这段代码:

 // Resize event handler; triggered immediately to set initial position splitter.bind("resize", function(e, size){ // Custom events bubble in jQuery 1.3; don't get into a Yo Dawg if ( e.target != this ) return; ...... }).trigger("resize" , [initPos]); 

“哟dawg”参考是死的赠品:)

果然,在Chrome中调试之后,这个特定的事件处理函数会有过多的递归。 编写它的开发人员试图解决该问题,但由于某些原因,较新版本的JQuery库无法按预期工作,并且永远不会满足转义条件。 据我所知,这段特殊代码仅在页面加载期间用于设置拆分器的初始位置。 我发现除了堆栈溢出之外,拆分器仍然可用,我发现问题的唯一原因是因为初始化拆分器后我的javascript代码没有运行。 如果你有时间,看看你能否找出为什么这部分代码不起作用并发布修复。 如果你赶时间并且不介意使用duct-tape,请在你调用.splitter()函数的代码行周围试一试。 它似乎在Chrome 19和IE 9中都运行良好。

有一个jQuery.splitter的更新分支,它可以在https://github.com/e1ven/jQuery-Splitter上使用jQuery 1.8(如果你恢复jQuery.browser也是1.9)。

UI-Layout保持最新并且“分裂”并且更多,并且相当容易使用。

非常极简的例子

 $('body').layout({ applyDemoStyles: true }); 
   
Center

Go to the Demos page

* Pane-resizing is disabled because ui.draggable.js is not linked

* Pane-animation is disabled because ui.effects.js is not linked

North
South
East
West

我在将网站升级到jQuery 1.8的过程中遇到了同样的问题。 在对代码进行了一些调试和调试之后,在我看来有两个问题:resize事件在几个地方被不必要地触发,并且在分割器的resize事件处理程序设置之前它在分割器上被触发。 我切换了最后两个代码块的顺序,以确保首先设置拆分器的resize事件处理程序并整理几行。 它现在看起来像这样:

  // Resize event handler splitter.bind("resize", function(e, size){ // Determine new width/height of splitter container splitter._DF = splitter[0][opts.pxFixed] - splitter._PBF; splitter._DA = splitter[0][opts.pxSplit] - splitter._PBA; // Bail if splitter isn't visible or content isn't there yet if ( splitter._DF <= 0 || splitter._DA <= 0 ) return; // Re-divvy the adjustable dimension; maintain size of the preferred pane resplit(!isNaN(size)? size : (!(opts.sizeRight||opts.sizeBottom)? A[0][opts.pxSplit] : splitter._DA-B[0][opts.pxSplit]-bar._DA)); e.stopPropagation(); }); // Resize event propagation and splitter sizing if ( opts.anchorToWindow ) { // Account for margin or border on the splitter container and enforce min height splitter._hadjust = dimSum(splitter, "borderTopWidth", "borderBottomWidth", "marginBottom"); splitter._hmin = Math.max(dimSum(splitter, "minHeight"), 20); splitter._bottomOffset = opts.bottomOffset ? opts.bottomOffset : 0; $(window).bind("resize", function(){ var top = splitter.offset().top; var wh = $(window).height() - splitter._bottomOffset; splitter.css("height", Math.max(wh-top-splitter._hadjust, splitter._hmin)+"px"); splitter.trigger("resize"); }).trigger("resize"); } else if ( opts.resizeToWidth ) $(window).bind("resize", function(){ splitter.trigger("resize"); }); 

另外,请确保删除

 if ( !$.browser.msie ) panes.trigger("resize"); 

来自reSplitfunction。 如果你想在一个地方看到它,我已经将整个内容上传到了GitHub仓库 。

根据Steven Hunt的回答,我有一个解决方法,添加try / catch块,并删除递归调用。

用这个修改版本替换下面的块(从149线左右) –

  try { if ( opts.anchorToWindow ) { // Account for margin or border on the splitter container and enforce min height splitter._hadjust = dimSum(splitter, "borderTopWidth", "borderBottomWidth", "marginBottom"); splitter._hmin = Math.max(dimSum(splitter, "minHeight"), 20); $(window).bind("resize", function(){ var top = splitter.offset().top; var wh = $(window).height(); splitter.css("height", Math.max(wh-top-splitter._hadjust, splitter._hmin)+"px"); }).trigger("resize"); } else if ( opts.resizeToWidth && !$.browser.msie ) $(window).bind("resize", function(){ splitter.trigger("resize"); }); } catch(err) { }