jquery:用户点击另一个元素后,我可以返回同一个点击事件吗?

时间:2015-12-16 15:07:25

标签: javascript jquery

我的要求是交换到小部件。第一次用户点击小部件A标题时,我可以将本地信息/数据保存在某处(即用户点击的widgetId = A')现在我等待用户点击另一个小部件标题小部件B.

一旦控制传回原始功能现在我有关于Widget B id的信息,我可以交换。

<div>
<div class="widget header" id="WidgetA"> .... </div>
<div class="widget header" id="WidgetC"> .... </div>
<div class="widget header" id="WidgetB"> .... </div>
</div>

我在几周后看到了stackoverflow上的一个jquery代码,它将控制权发送回早期的点击事件,但从那以后我一直在搜索它,找不到任何地方。

之类的东西 -

$(..).on("click", function() {
   // some more code
    $(..).XXX("xxx", function(){
          //on second click code flows directly here...
    });

});

2 个答案:

答案 0 :(得分:0)

&#34;返回到之前的点击事件&#34;并不容易/可能。 - 相反,定义一个函数来检查两个事件是否都已发生,某事如:

var widgetAclicked = false;
var widgetBclicked = false;

$("#WidgetA").click(function() { widgetAclicked = true; process(); }
$("#WidgetB").click(function() { widgetBclicked = true; process(); }

function process() {
    if (!widgetAclicked) return;
    if (!widgetBclicked) return;

    // process when both clicked
}

如果你不想使用var,你可以在小部件上存储,例如:

$("#WidgetA,#WidgetB").click(function { 
    $(this).data("beenclicked", true);
    process();
});

function process() {
    if ($("#WidgetA").data("beenclicked") != true 
            || $("#WidgetB").data("beenclicked") != true)
        return;
    // process
}

这也使得添加/删除小部件更容易,而无需任何额外的代码:

// apply to all widgets
$(".widget").click(function { 
    $(this).data("beenclicked", true);
    process();
});

然后您的process()可以检查哪些已被点击以进行任何恶意处理。

答案 1 :(得分:0)

您可以将点击的元素ID存储在数组中,您将知道点击了哪些元素:

$(document).ready(function(){

        var clickedElementsIds = [];

        $('#widget header').on('click' function(event){
            var clickedElementId = event.currentTarget.id;
            clickedElementsIds.push(clickedElementId);
        });
});

当您在数组中拥有ID时,您可以随意执行任何操作。