Javascript+;区分用户单击和从函数发送的单击

Javascript+;区分用户单击和从函数发送的单击,javascript,jquery,Javascript,Jquery,我有这样的手风琴功能: $("#notaccordion").addClass("ui-accordion ui-widget ui-helper-reset") .find("h3") .addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-top ui-corner-bottom") .prepend('<span class="ui-icon ui-icon-triangl

我有这样的手风琴功能:

$("#notaccordion").addClass("ui-accordion ui-widget ui-helper-reset")
   .find("h3")
   .addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-top ui-corner-bottom")
    .prepend('<span class="ui-icon ui-icon-triangle-1-e"/>')
    .click(function () {
       $(this).toggleClass("ui-accordion-header-active").toggleClass("ui-state-active")
          .toggleClass("ui-state-default").toggleClass("ui-corner-bottom")
          .find("> .ui-icon").toggleClass("ui-icon-triangle-1-e").toggleClass("ui-icon-triangle-1-s");
       if ($(this).next().is(':hidden') == true) {
          ;
          $(this).addClass('active'); $(this).next().slideDown('normal');
       }
       else {
          $(this).removeClass('active'); $(this).next().slideUp('normal');
       }

       //.end().next().slideUp('normal');
       return false;
    })
    .next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").hide();

如何让手风琴
。单击(函数()
函数知道是
clickAllPanels
发送“点击”而不是用户的物理点击。我需要这样做,因为我想更改来自
clickAllPanels

的上下滑动逻辑,我的方法是使用两个不同的事件名称,一个是“点击”另一种是“强制点击”:

触发事件时:

$( ... whatever ... ).trigger("forced-click");

我想另一种方法是检查事件对象是否有“originalEvent”属性。如果没有,那么您知道它是通过编程触发的。我个人不喜欢依赖它,因为它没有文档记录。

我的方法是使用两个不同的事件名称,一个是“单击”另一种是“强制点击”:

触发事件时:

$( ... whatever ... ).trigger("forced-click");

我想另一种方法是检查事件对象,看看是否有“originalEvent”属性。如果不是,则您知道它是通过编程方式触发的。就我个人而言,我不喜欢依赖它,因为它没有文档记录。

通常最好为事件处理程序和您正在执行的实际工作使用单独的函数:

function do_stuff(suitable_arguments, a_flag){
    //...
}

$(/*...*/).click(function(){
   do_stuff( /*...*/, true);
}

in_my_other_code(){
   do_stuff( /*...*/, false);
}

通过将逻辑与事件处理分离,您可以更灵活地选择何时以及如何调用它。

通常最好为事件处理程序和您正在执行的实际工作设置单独的函数:

function do_stuff(suitable_arguments, a_flag){
    //...
}

$(/*...*/).click(function(){
   do_stuff( /*...*/, true);
}

in_my_other_code(){
   do_stuff( /*...*/, false);
}

通过将逻辑与事件处理分离,您可以更灵活地选择何时以及如何调用它。

为什么不在“clickItem()”函数中使用jquery:

function clickItem(divObj) {
    $(divObj).trigger('click', { manual: true });
}
单击处理程序中的事件参数将具有属性“isTrigger”,当用鼠标单击项目时,该属性将不存在:

$("#notaccordion")
    ...
    .click(function(e) {

        if (e['isTrigger']) {
            // do this
        } else {
            // do that
        }

    });

下面是一个

为什么不在“clickItem()”函数中使用jquery:

function clickItem(divObj) {
    $(divObj).trigger('click', { manual: true });
}
单击处理程序中的事件参数将具有属性“isTrigger”,当用鼠标单击项目时,该属性将不存在:

$("#notaccordion")
    ...
    .click(function(e) {

        if (e['isTrigger']) {
            // do this
        } else {
            // do that
        }

    });

这里有一个

不模拟单击就不可能打开所有面板吗?不模拟单击就不可能打开所有面板吗?