click()多次触发

时间:2010-08-11 16:23:29

标签: javascript asp.net javascript-events click

我正在使用document.getElementById(“val”)。click()调用click事件,但它会多次触发。

这里我添加了eventHandler

try {
    //add mousedown event handler to navigation buttons
    addEventHandler(oPrevArrow, "mousedown", handlePrevDayClick);
    addEventHandler(oNextArrow, "mousedown", handleNextDayClick);
    addEventHandler(oLogout, "mousedown", handleLogoutClick);
} 
catch (err) {
}

在点击事件中,我正在执行“自动点击”

function handleNextDayClick(e) {
    e = e || window.event;
    stopEvent(e);
    document.getElementById("btn_nextday").click();
}

我需要帮助才能找出多次调用的内容以及可能的修复方法。

注意:自动点击的按钮会调用ASP.NET Code-Behind

中的方法

3 个答案:

答案 0 :(得分:2)

通常,当您多次触发事件时,这是因为事件多次附加到元素,或者您自动单击的元素是附加了相同事件的另一个元素的子元素。检查它们是否相互包裹,如果是,则需要检测当前目标是否等于目标,以确保它只发生一次。或者你可以停止事件传播。

答案 1 :(得分:1)

尝试用JQuery挂钩:

 $(document).ready(function() {
    $('#oPrevArrow').click(function() {
        $('#btn_prevday').trigger('click');
    });
    $('#oNextArrow').click(function() {
        $('#btn_nextday').trigger('click');
    });
    $('#oLogout').click(function() {
        $('#btn_logout').trigger('click');
    });
 });

这可能更简洁,具体取决于您的箭头和按钮在DOM中的布局方式。可能它可能只是一行jQuery。

类似的东西:

 $(document).ready(function() {
    $('.arrow').click(function() { //note css class selector
        $('this + button').trigger('click');
    });
 });

答案 2 :(得分:0)

这是因为特定事件多次绑定到同一个元素。

对我有用的解决方案是:

使用.die()方法杀死所有附加的事件。

然后附加你的方法监听器。

因此,

$('.arrow').click(function() {
// FUNCTION BODY HERE
}

应该是:

$('.arrow').die("click")
$('.arrow').click(function() {
// FUNCTION BODY HERE
}