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

jquery : Can I return back to same click event after user clicks on another element?

本文关键字:返回 我可以 同一个 事件 元素 用户 另一个 jquery      更新时间:2023-09-26

我的需求是交换到周围的小部件。用户第一次点击小部件A标题时,我可以将本地信息/数据存储在某个地方(即"用户点击的小部件Id=A"),现在我等待用户点击另一个小部件标题widget 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...
    });
});

"返回到以前的点击事件"并不容易/可能-相反,定义一个函数来检查是否两个事件都发生了,类似于:

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();
});

那么你的CCD_ 2可以检查哪些被点击了,以进行它需要的任何邪恶处理。

您可以将单击的元素Id存储在一个数组中,您将知道单击了哪些元素:

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

当你在数组中有id时,你可以对它们为所欲为。