JQuery UI 中的自定义可调整大小的句柄 [英] Custom Resizable Handles in JQuery UI

查看:35
本文介绍了JQuery UI 中的自定义可调整大小的句柄的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试创建一个可调整大小的文本框(ASP.NET 多行 TextBox/HTML textarea)并使用 JQuery UI 使其可调整大小,但似乎是遇到一些涉及自定义拖动手柄的问题.

关于 Resizable 方法(特别是 handles 选项)建议我可以设置任何句柄以使用自定义 HTML 元素.我已经设法使用默认的可调整大小的句柄使可调整大小的文本框工作得很好,但是尝试设置自定义的(即我在标记中定义的 HTML 元素)会产生以下问题:可调整大小的容器为底部的 div 手柄(用于南手柄),但将空间留空并显示可调整大小的容器下方(外部)的元素(使用 Firebug 验证).

这是我的标记 (ASP.NET/XHTML) 和 JavaScript 代码:

<asp:TextBox runat="server" ID="codeTextBox" TextMode="MultiLine" Wrap="false" Rows="15"></asp:TextBox><div class="resizable-s" style="width: 100%; height: 22px; background: red;">

<script type="text/javascript">$(函数(){var codeTextBox = $("#<%= codeTextBox.ClientID %>");codeTextBox.resizable({句柄:{ s : $(".resizable-s") },最小高度:80,最大高度:400});});

当然,我不能让可调整大小的句柄 div(class resizable-s)成为 TextBox/textarea 的子级,但根据 JQuery 文档,这应该不是问题.

从我所做的搜索来看,我不是唯一遇到这个问题的人.(不幸的是,JQuery 文档没有给出使用自定义可调整大小的句柄的例子,所以我们都不确定正确的代码.)如果有人可以提出修复这个问题,或者确实确认这是一个 JQuery 错误,非常感谢.

解决方案

从我在 jquery-ui 代码中所做的一些挖掘,我想我可以确认可调整大小元素之外的自定义句柄不起作用.

问题是鼠标事件是为可调整大小的元素(或在 textarea 的情况下的包装元素)初始化的.如果句柄不是鼠标事件处理位置的子级,则不会触发句柄上的 mousedown 事件,从而使其不可拖动.

作为概念证明,我在 jquery-ui 中进行了一些修补,直到我开始(某种程度)工作.不保证代码,但它应该指出需要进行什么样的更改才能使其工作.

我更改了 ui.resizable.js 中的第 140 行:

this._handles = $('.ui-resizable-handle', this.element).disableSelection();

this._handles = $('.ui-resizable-handle').disableSelection();

然后在为可调整大小的元素调用 mouseInit 之后,我在 ui.resizable.js(大约第 180 行)中添加了以下代码(来自 ui.core.js 的 mouseInit 的一部分,可能应该使用整个函数):

<代码> ...//初始化鼠标交互this._mouseInit();//也为手柄添加鼠标事件 - ylebrefor (i in this.handles) {$(this.handles[i]).bind('mousedown.resizable', function(event) {返回 self._mouseDown(event);});}

这允许我制作一个不是可调整大小元素的子元素的调整大小句柄.我的句柄是一个 id 为 'south' 的 div,并附加到可调整大小的元素.这是 HTML 代码段: