如何从jQuery dom元素获取click事件处理程序?

时间:2011-02-15 02:04:58

标签: javascript jquery

我有一组可重复使用的linc list渲染器,linc list是一个包含Description,Uri和Thumbnail的对象数组。

这些渲染器采用linc列表和目标div,并根据渲染器,在目标div中以不同方式渲染linc列表。

我正在使用一个BasicList渲染器,它带有一个linc列表,并为Linc List中的每个项目生成一个带有LI的UL。

我还希望能够传入将添加到每个LI的HTML元素数组。

所以说,例如,LincList是一个用户列表,我希望能够在每个用户名旁边放一个按钮来禁用用户,我希望能够这样做:

var userLincList = someFunctionToFetchUsersLincListFromServer();
var targetDivForList = jQuery('<div>');
var disableUserButton = jQuery('<button>', {html : "Disable"});

// There are a whole bunch of different options that can be passed in to the renderer 
// (Otherwise it will use defaults) - An array of additional elements is one of them.

var basicListRenderOptions = {};
basicListRenderOptions.additionlElementsToRender = Array();
basicListRenderOptions.additionlElementsToRender.push(disableUserButton);

LincListerRenderers.RenderBasicLincList(userLincList, targetDivForList, basicListRenderOption)

这会给我们:

<div>
   <ul>
      <li><span>Description1</span><img src="Thumbnail"><button>Disable</button></li>
      <li><span>Description2</span><img src="Thumbnail"><button>Disable</button></li>
      <li><span>Description3</span><img src="Thumbnail"><button>Disable</button></li>
      <li><span>Description4</span><img src="Thumbnail"><button>Disable</button></li>
   </ul>
</div>

好到目前为止一切都那么好我已经完成了所有这些 - 但实际上有任何用处,其他元素需要一个onClick事件。

我想要的是用户能够声明onClick正常的jQuery方式,即:

var disableUserButton = jQuery('',{html:“Disable”,click:DisableUser()});

为了使这个有用,我需要能够传递有关单击每个元素上的onClick函数的列表项的信息。

因此,当我创建LI时,我想要做的就是获取当前的click函数,取消绑定它,将它包装在我自己的函数中,只需调用它(传入我想要的参数)然后重新绑定我的对click事件的包装函数。

例如:

for(var i = 0; i < options.additionlElementsToRender.length; i++)
{
    var listItemElement = options.additionlElementsToRender[i].clone();

    if(listItemElement.click != null)
    {
        var listItemElementClickFunction = jQuery(listItemElement).click;

        listItemElement.unbind('click');

        listItemElement.click(
                           function() 
                           {
                                listItemElementClickFunction(lincItem.description, lincItem.Uri, lincItem.Thumbnail)
                           });
    }

      jQuery(listItemElement).appendTo(listItem);
}

现在的问题是A)listItemElement.click总是有一个值,即使用户没有为它分配处理程序而B)var listItemElementClickFunction = jQuery(listItemElement).click给我jQuerys点击包装函数,而不是实际的处理程序为分配的用户提供功能。

有没有办法可靠地检测处理程序是否已分配给.click,还有办法直接访问处理函数吗?

很抱歉这么长的帖子!

0 个答案:

没有答案