使用jquery将现有单击事件函数分配给另一个单击事件

时间:2009-10-27 05:38:41

标签: jquery events

好的,所以我有一些像这样的HTML:

<div id="navigation">

<ul>

<li>
<a>tab name</a>
<span class="delete-tab">X</span>
</li>

<li>
<a>tab name</a>
<span class="delete-tab">X</span>
</li>

<li>
<a>tab name</a>
<span class="delete-tab">X</span>
</li>

<li class="selected">
<a>tab name</a>
<span class="tab-del-btn">X</span>
</li>

</ul>

</div>

然后我在我无法控制的页面上执行了javascript(这是在liferay门户网站中)。然后我想用自己的自定义javascript操作事物。

... SO

对于每个span.delete-tab元素,先前已分配了一个on-click事件函数。每个跨度都是相同的函数调用。我想获取该函数(any)并从span.tab-del-btn的click事件中调用它?

这就是我试图做的事情:

var navigation = jQuery('#navigation');
var navTabs = navigation.find('.delete-tab');

var existingDeleteFunction = null;

navTabs.each(function (i){
        var tab = jQuery(this);
        existingDeleteFunction = tab.click;
});

var selectedTab = jQuery('#navigation li.selected');
var deleteBtn = selectedTab.find('.tab-del-btn');

deleteBtn.click(function(event){
        existingDeleteFunction.call(this);
});

虽然不起作用。 existingDeleteFunction不是原始函数,它是一些jquery默认函数。

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

试试这个:

var navTabs = $("#navigation .delete-tab:first");

$(".tab-del-btn","#navigation li.selected").click(function() {
    navTabs.click();
});

我也为你缩短了代码。

答案 1 :(得分:0)

我的错,但有更多的信息,我意识到我遗漏了。我需要在执行其中一个函数后删除.delete-tab元素。无论如何,经过一些戳我发现这是有效的。我想尽量少做几行代码。有任何想法吗 ?

var navigation = jQuery('#navigation');
var navTabs = navigation.find('.delete-tab');

var events = jQuery.data(navTabs.get(0), "events");
var clickEvents = events.click;

var existingDeleteFunction = null;

jQuery.each(clickEvents, function(i, val) {
    existingDeleteFunction = val;
});   

navTabs.each(function (i){
    var tab = jQuery(this);
    tab.remove();
});

var selectedTab = jQuery('#navigation li.selected');
var deleteBtn = selectedTab.find('.tab-del-btn');

deleteBtn.bind('click',existingDeleteFunction);

答案 2 :(得分:0)

您可以将发布的代码缩短为:

var clickEvents = jQuery('#navigation .delete-tab').data("events").click;
var btn = jQuery('#navigation li.selected .tab-del-btn');
jQuery.each(clickEvents, function(i, val) {
  btn.bind('click',val);
});
jQuery('#navigation .delete-tab').remove();

这会将原始按钮的每个点击处理程序分配给.tab-del-btn元素,该功能应该等同于您在后续答案中发布的代码。