0

我的菜单是这样工作的:每个菜单项(例如,下面的菜单项之一)都位于<td>嵌套在 ANOTHER 中的表中<td>。该外部<td>有一些 onclick 事件处理程序(这里称为“processMenuClick()”)。

<td onClick="processMenuClick(<item-dependent-arguments>);">
    <table>
        <tr>
            <td class="innermenuitem">Menu Item One</td>
       </tr>
    </table></td>

在某些情况下,我希望阻止菜单响应点击。为了测试这将如何工作,我制作了两个按钮。一个将 event.stopPropagation 应用于每个<td>“innermenuitem”类,如下所示:

<button onclick="javascript:stopit()">Test the disable menu functionality</button>

<script type="text/javascript">
function stopit()
{
    $("td.innermenuitem").click(function(event)
    {
        event.stopPropagation();
    })
}
</script>

这似乎工作得很好。当我点击按钮时,菜单停止响应点击。但现在说我想重新启用菜单。click 处理程序在外​​部仍然不受干扰<td>。所以我希望我的第二个按钮禁用我已应用于内部的 stopPropagation <td>。那有意义吗?如果是这样,它是如何完成的?

注意:请注意,上面应该允许我禁用菜单并重新启用它,而无需将外部重新绑定<td>到其处理程序。这很重要,因为传递给“processMenuClick()”的参数仅在服务器上是已知的。如果我必须重新绑定处理程序,我将不得不想办法通过某种回发来召​​回它们。但我认为,既然我所做的就是停止从内部冒泡事件<td>,假设有办法撤消这个(并允许事件再次冒泡)我应该是金子。但是阅读其他线程似乎 stopPropagation 仅用于一个事件,而不是我想的那样,这基本上就像<td>. 有人可以让我直截了当吗?(希望能解决我的问题

段落

4

2 回答 2

1
function startIt(){
     $('td.innermenuitem').off('click');
}

stop 它应该与 on 方法绑定以使其尽可能简单。

function stopIt(){
    $('td.innermenuitem').on('click', function(event){
       event.stopPropagation();
    });
}
于 2012-09-24T05:19:46.883 回答
0

还有一种不使用 jQuery 的方法:
dataSend
onclick中发送一个 ajax 请求,您可以访问该事件 ,因此在调用后,冒泡会通过event.stopPropagation();停止。
没有 stopPropagation 的 div '1' 中的点击事件也将被激活

<div id='1' class='mnb_bookinfo' 
onclick='dataSend(cBookInfo,34)';>

<div id='2' class='mnb_bookedit' 
onclick="dataSend(cBookEdit,34);event.stopPropagation();">
<img src='misc/mnb/icon_edit.svg' width=32 height=32>
</div>

</div>
于 2017-09-28T18:19:26.980 回答