我可以在事件中调用另一个事件处理程序吗?

时间:2012-05-25 09:05:21

标签: javascript jquery event-handling

我有这两组代码,一个是在点击按钮时提示,

$('.button_class').click(function(){
    var baker_url = base_url + 'baker/baker/manage/Bread/1';
    var answer = confirm('Are you sure?');
    if(answer == true){
        // if this is true, i will call an external script so that within this condition that process will be executed
    }
    else if(answer == false){
        return false; // exits
}
});

然后这段代码就是负责在点击按钮时执行过程的代码,

$('.another_button_class').click(function(e){
        e.preventDefault();
        var baker_url = base_url + 'baker/baker/manage/Bread/1';
        var form    = '#'+ $(this).attr('rel');
        var url     = $(form).attr('action');
        var target  = '#'+ $(form).attr('rel');
            $(target).slideUp();
            $.post(url, $(form).serialize(),function(data) {
                $(target).html(data).slideDown(function(){
                    if(data == '<div class="ok">Added</div>'){
                    setTimeout(refresh,1000)
                    c();
                    window.location = baker_url; // sets the url after refreshing
                    }
                });

            });
    });

在第一个函数中,当answer == true时,我想执行后一个函数(单击按钮时执行流程的函数)。

我是否真的可以调用另一个函数或事件处理程序来在另一个函数中执行其进程?

2 个答案:

答案 0 :(得分:2)

如果我正确理解了这个问题,那么当您单击按钮#2或单击按钮#1并在提示中单击是时,您需要产生效果? 如果是这样,我可以考虑三个选项:

  1. 如果e未定义,则命名第二个函数并使其工作;所有它真正做到的是防止默认。然后,您可以从第一个事件中调用命名函数。

  2. 更好的版本1:创建一个新函数,在第二段代码中执行除e.preventDefault();之外的所有操作。然后你可以从这两个事件中调用它。

  3. 如果在第一个按钮上选择“是”,则使用jQuery模拟第二个按钮的点击事件。

  4. 编辑在这种情况下,第二个会更好。如果您确实需要事件对象,请使用第三个。

答案 1 :(得分:1)

不确定这是否是你想要的

if(answer == true){
    // if this is true, i will call an external script so that within this condition that process will be executed
    $('.another_button_class').trigger('click');
}

这将触发对$('.another_button_class')元素绑定的click事件处理程序的调用。


确保在第一次点击时使用e.preventDefault();,否则将会跟踪链接