jQuery:获取对click事件的引用并在以后触发它?

Rob*_*ett 5 javascript jquery

我想在一些额外的代码中包装现有的click事件.

基本上我在手风琴中有一个多部分形式,我想触发手风琴标题点击的验证.手风琴代码在别处使用,我不想改变它.

这是我尝试过的:

   //Take the click events off the accordion elements and wrap them to trigger validation
    $('.accordion h1').each(function (index, value) {
        var currentAccordion = $(value);
        //Get reference to original click
        var originalClick = currentAccordion.click;

        //unbind original click
        currentAccordion.unbind('click');

        //bind new event           
        currentAccordion.click(function () {
            //Trigger validation
            if ($('#aspnetForm').valid()) {
                current = parseInt($(this).next().find('.calculate-step').attr('data-step'));             
                //Call original click.
                originalClick();
            }
        });
    });
Run Code Online (Sandbox Code Playgroud)

jQuery抛出一个错误,因为它试图this.triggeroriginalClick函数内部做,我不认为this是jQuery期望它.

编辑:更新的代码.这有效,但有点难看!

   //Take the click events off the accordion elements and wrap them to trigger validation
    $('.accordion h1').each(function (index, value) {
        var currentAccordion = $(value);
        var originalClick = currentAccordion.data("events")['click'][0].handler;
        currentAccordion.unbind('click');
        currentAccordion.click(function (e) {
            if ($('#aspnetForm').valid()) {
                current = parseInt($(this).next().find('.calculate-step').attr('data-step'));
                $.proxy(originalClick, currentAccordion)(e);
            }
        });
    });
Run Code Online (Sandbox Code Playgroud)

gb.*_*gb. 4

我认为这:

var originalClick = currentAccordion.click;
Run Code Online (Sandbox Code Playgroud)

实际上并没有按照您的想法进行 - 您正在捕获对 jQuery click 函数的引用,而不是您添加的事件处理程序,因此当您调用originalClick() 时,它相当于: $(value).click()