将 jqueryui 手风琴事件处理程序从“单击”动态更改为“鼠标悬停”

Posted

技术标签:

【中文标题】将 jqueryui 手风琴事件处理程序从“单击”动态更改为“鼠标悬停”【英文标题】:Dynamically changing jqueryui accordion event handler from "click" to "mouseover" 【发布时间】:2011-05-21 20:10:45 【问题描述】:

我有一种情况,我希望能够将列表中的项目拖到手风琴中的目标中。但是,我拖动到的项目可能在另一个面板中(一个未打开的面板)。

为了方便这一点,我想在拖动开始后将手风琴的事件从单击动态更改为鼠标悬停。拖动完成后,我会切换回点击。这将使用户将鼠标悬停在关闭的面板上,使其打开,此时他们可以放下项目。完成后,我希望他们使用单击来打开面板。

这可能吗?我试过使用 setter:

$( ".selector" ).accordion( "option", "event", 'mouseover' );

但它似乎并没有真正改变事件。我发现有人提到这可能不受支持。如果没有,有人知道我该怎么做吗?

【问题讨论】:

【参考方案1】:

您需要在元素拖动事件处理程序中使用设置器。像下面这样的东西应该可以工作:

$('li.draggable').mousedown(function()

    $( "div.accordion" ).accordion( "option", "event", 'mouseover' );

).mouseup(function()

    $( "div.accordion" ).accordion( "option", "event", 'click' );

);

您需要根据您的具体情况定制选择器。 mousedown 事件处理程序将在用户单击可拖动元素时触发,将手风琴的 event 设置更改为“鼠标悬停”;当点击被释放并结束拖动时,手风琴的event 设置恢复为“点击”。

【讨论】:

感谢您的回复。那是容易的部分。我遇到的问题是手风琴实际上似乎并没有动态地改变它的事件。我可以设置它,值会发生变化,但事件仍然以相同的方式触发。我什至尝试使用 $( "div.accordion" ).accordion( "option", "event", 'mouseover' ); 在 firebug 的命令行中设置它。它不起作用。【参考方案2】:

好的,看起来这实际上是一个错误。应该在 1.9 中解决。

JqueryUI bug 6740

【讨论】:

以上是关于将 jqueryui 手风琴事件处理程序从“单击”动态更改为“鼠标悬停”的主要内容,如果未能解决你的问题,请参考以下文章

JQuery UI:手风琴回调

除了像 onclick 这样的委托处理程序事件之外,Jquery 直接事件不会触发?

从jQuery的可拖动STOP停止事件传播的onclick

jqueryui 拖拽结束 触发了 单击事件 解决办法

jQuery UI:DatePicker 只有 CSS?

处理 jQueryUI Datepicker for Bootstrap 下拉菜单的点击事件