我希望这个链接有一个JavaScript对话框,询问用户“你确定吗?”Y / N”。

<a href="delete.php?id=22">Link</a>

如果用户点击“是”,链接应该加载,如果“否”什么都不会发生。

我知道如何在表单中做到这一点,使用onclick运行一个返回true或false的函数。但我如何做到这一点与<a>链接?


当前回答

我建议避免内联JavaScript:

var aElems = document.getElementsByTagName('a');

for (var i = 0, len = aElems.length; i < len; i++) {
    aElems[i].onclick = function() {
        var check = confirm("Are you sure you want to leave?");
        if (check == true) {
            return true;
        }
        else {
            return false;
        }
    };
}​

JS小提琴演示。

上面的更新减少了空间,但保持了清晰/功能:

var aElems = document.getElementsByTagName('a');

for (var i = 0, len = aElems.length; i < len; i++) {
    aElems[i].onclick = function() {
        return confirm("Are you sure you want to leave?");
    };
}

JS小提琴演示。

一个有点迟的更新,使用addEventListener()(由baommegakapa在下面的评论中建议):

function reallySure (event) {
    var message = 'Are you sure about that?';
    action = confirm(message) ? true : event.preventDefault();
}
var aElems = document.getElementsByTagName('a');

for (var i = 0, len = aElems.length; i < len; i++) {
    aElems[i].addEventListener('click', reallySure);
}

JS小提琴演示。

上述方法将一个函数绑定到每个单独链接的事件;当你可以将事件处理(使用委托)绑定到一个祖先元素时,这可能是相当浪费的,比如下面:

function reallySure (event) {
    var message = 'Are you sure about that?';
    action = confirm(message) ? true : event.preventDefault();
}

function actionToFunction (event) {
    switch (event.target.tagName.toLowerCase()) {
        case 'a' :
            reallySure(event);
            break;
        default:
            break;
    }
}

document.body.addEventListener('click', actionToFunction);

JS小提琴演示。

由于事件处理附加到body元素上,body元素通常包含许多其他可单击的元素,因此我使用了一个临时函数(actionToFunction)来确定如何处理该单击。如果被单击的元素是一个链接,因此tagName为a,则将单击处理传递给reallySure()函数。

引用:

addEventListener()。 条件('三元')运算符。 确认()。 getElementsByTagName()。 onclick。 If(){}。

其他回答

你也可以试试这个:

<a href="" onclick="if (confirm('Delete selected item?')){return true;}else{event.stopPropagation(); event.preventDefault();};" title="Link Title">
    Link Text
</a>

如果您使用addEventListener(或attachEvent)附加事件处理程序,则此方法与上述任何一个答案都略有不同。

function myClickHandler(evt) {
  var allowLink = confirm('Continue with link?');
  if (!allowLink) {
    evt.returnValue = false; //for older Internet Explorer
    if (evt.preventDefault) {
      evt.preventDefault();
    }
    return false;
  }
}

你可以用以下任何一个来附加这个处理程序:

document.getElementById('mylinkid').addEventListener('click', myClickHandler, false);

或者对于旧版本的ie浏览器:

document.getElementById('mylinkid').attachEvent('onclick', myClickHandler);
<a href="delete.php?id=22" onclick = "if (! confirm('Continue?')) { return false; }">Confirm OK, then goto URL (uses onclick())</a>

大多数浏览器不会显示传递给confirm()的自定义消息。

使用此方法,如果用户更改了任何<input>字段的值,您可以显示一个带有自定义消息的弹出窗口。

您只能将此应用于页面中的某些链接,甚至其他HTML元素。只需添加一个自定义类到所有需要确认的链接,并使用以下代码应用:

$(document).ready(function() { let unsaved = false; // detect changes in all input fields and set the 'unsaved' flag $(":input").change(() => unsaved = true); // trigger popup on click $('.dangerous-link').click(function() { if (unsaved && !window.confirm("Are you sure you want to nuke the world?")) { return; // user didn't confirm } // either there are no unsaved changes or the user confirmed window.location.href = $(this).data('destination'); }); }); <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input type="text" placeholder="Nuclear code here" /> <a data-destination="https://en.wikipedia.org/wiki/Boom" class="dangerous-link"> Launch nuke! </a>

尝试更改示例中的输入值,以预览其工作方式。

jAplus

不需要编写JavaScript代码就可以做到这一点

<head>
   <script src="/path/to/jquery.js" type="text/javascript" charset="utf-8"></script>
   <script src="/path/to/jquery.Aplus.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
...
   <a href="delete.php?id=22" class="confirm" title="Are you sure?">Link</a>
...
</body>

演示页面