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
}
});
这里有一个不模拟单击就不可能打开所有面板吗?不模拟单击就不可能打开所有面板吗?