Jquery 单击问题-确认警报不阻止HREF单击

Jquery 单击问题-确认警报不阻止HREF单击,jquery,click,confirm,propagation,Jquery,Click,Confirm,Propagation,我正在努力实现以下目标: 当用户在包含复选框的div(“productListMatch”)之外单击时,如果选中了任何复选框,则会出现确认警报,让用户知道他们尚未在其中保存复选框选择 简而言之,我正在检查是否保存了选中的项目。如果是,通知用户,让他们选择是否保存 这就是我所做的: function formCheckboxConfirm() { $('html').click(function() { var elem = document.getElementById(

我正在努力实现以下目标:

当用户在包含复选框的div(“productListMatch”)之外单击时,如果选中了任何复选框,则会出现确认警报,让用户知道他们尚未在其中保存复选框选择

简而言之,我正在检查是否保存了选中的项目。如果是,通知用户,让他们选择是否保存

这就是我所做的:

function formCheckboxConfirm() {
    $('html').click(function() {
        var elem = document.getElementById('frm-list-product').elements;
        for (i = 0; i < elem.length; i++) {
            if(elem[i].type == "checkbox" && elem[i].checked) {
                confirm("You have made changes! Do you want to proceed without saving your changes?");
                break;
            }
        }
});

    $(".productListMatch").click(function(e) {
        e.stopPropagation(); // I thought this would stop all link clicks, but it's not working as I expected.
    });
}
函数formCheckboxConfirm(){
$('html')。单击(函数(){
var elem=document.getElementById('frm-list-product')。元素;
对于(i=0;i
虽然这在一般情况下是有效的,但它不适用于链接。单击它们后,它们将继续执行,我仍然会收到确认警报

注意:在div之外的网页上有许多导航链接。“productListMatch”div本身是jquery选项卡(两个选项卡中的第二个)内容的一部分,因此必须单击选项卡才能看到“productListMatch”div

我想要的是:

  • 如果单击了复选框(和保存按钮)之外的任何链接
    • 停止执行链接
      • 执行复选框是否选中的检查
        • 如果选中复选框,则提供确认警报
          • 若用户单击“确定”,网页将继续链接最初单击的链接
          • 若用户单击“取消”,则网页不会继续最初单击的链接
        • 若未选中复选框,则无确认警报,网页将继续链接最初选中的链接
我尝试了几个场景,虽然我可以让链接停止(我使用了preventDefault),但我不确定如何让它们重新开始。也许这整件事我都搞错了

我希望能得到一些帮助

谢谢

Stephen

函数
confirm()
返回需要测试的布尔值。例如:

if confirm("You have made changes! Do you want to proceed without saving your changes?") {
   // continue or whatever 
} else {
   return false; // or break or whatever
}

谢谢JMax。这在一些链接上确实起了作用。但是,其他链接有内联onclick。而且,尽管我已经尝试了好几天了,我还是想不出一个方法来禁用它们,获取确认消息,并在确认为“OK”时重新启用它们。我最初在发布(其他人编写的代码)时没有意识到这一点。不过谢谢。您可以将事件绑定到DOM的父元素,而不是使用内联onclicks和use,以避免在用户不确认的情况下触发其他单击--尽管我没有使用bind方法。这听起来像是我想用的。我们最好研究一下你的新话题。有了更多的信息,回答起来就更容易了