2

情况就是这样,我之前已经问过这个问题,但我仍然没有让这个工作如我所愿。

我有一个附加到单击事件的复杂函数,该函数进行 AJAX 调用,然后在模式对话框中显示该信息。

虽然我的示例使用 jQuery mobile,但我需要通过本机 JavaScript 工作,因为我有使用 jQuery mobile 的移动设备和不使用任何 jQuery 的桌面设备。这不是我想要的,但它也是我无法控制的。

因此,您可以在此JSFiddle上查看我的示例。对于此示例,我只是使用超时来模拟我遇到的问题。如果您多次单击该链接,它将多次触发该事件。我需要防止这种行为。我已经尝试event.preventdefault删除事件监听器和其他一些东西,但我似乎无法重新附加 onclick。因此,一旦关闭对话框,用户就无法重新使用该链接,如果他们愿意的话。由于此对话框的呈现方式,如果可能的话,我想尝试将它们全部包装到一个函数中。

我正在寻找一个简单而优雅的解决方案,但我无法为这个问题想出一个好的解决方案。

谁能提供一些解决方案?

4

2 回答 2

2

您可以使用标志来控制点击行为

前任

var inProgress = false;
function showDialog() {
    inProgress = false;
    $.mobile.changePage("#dialog", {transition:"pop"});
}

function callDialog() {
    if(inProgress){
        return;
    }
    inProgress = true;
    setTimeout(showDialog, 1000);
}    

演示:小提琴

于 2013-05-29T03:12:23.587 回答
0

更新了您的小提琴,基本上只需在单击后删除 onclick 处理程序,然后在完成后将其重新添加

function callDialog() {
    console.log("been clicked");
    var anchor = document.getElementById("dosomethinganchor");           
    anchor.onclick = null;       // remove onclick function
    setTimeout(function () {
        anchor.onclick = callDialog;   //  got response back, make sure we add onclick back
        showDialog();
    }, 1000);
}  

http://jsfiddle.net/rvuZ6/8/

于 2013-05-29T02:44:19.347 回答