如何在单击 <a> 链接时显示确认对话框?

问题描述 投票:0回答:10

我希望此链接有一个 JavaScript 对话框,询问用户“您确定吗?是/否”。

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

如果用户单击“是”,则应加载链接,如果“否”则不会发生任何情况。

我知道如何在表单中执行此操作,使用

onclick
运行返回
true
false
的函数。但是我该如何使用
<a>
链接来做到这一点?

javascript html dom-events
10个回答
750
投票

内联事件处理程序

以最简单的方式,您可以在内联 confirm()

 处理程序中使用 
onclick
 函数。

<a href="delete.php?id=22" onclick="return confirm('Are you sure?')">Link</a>

高级事件处理

但通常您希望分离 HTML 和 Javascript,所以我建议您不要使用内联事件处理程序,而是在链接上放置一个类并为其添加一个事件侦听器。

<a href="delete.php?id=22" class="confirmation">Link</a>
...
<script type="text/javascript">
    var elems = document.getElementsByClassName('confirmation');
    var confirmIt = function (e) {
        if (!confirm('Are you sure?')) e.preventDefault();
    };
    for (var i = 0, l = elems.length; i < l; i++) {
        elems[i].addEventListener('click', confirmIt, false);
    }
</script>

此示例仅适用于现代浏览器(对于较旧的 IE,您可以使用

attachEvent()
returnValue
并提供
getElementsByClassName()
的实现,或使用 jQuery 等库来帮助解决跨浏览器问题)。您可以在 MDN 上阅读有关 这种高级事件处理方法的更多信息

jQuery

我不想被视为 jQuery 粉丝,但 DOM 操作和事件处理是它对浏览器差异最有帮助的两个领域。只是为了好玩,这是使用 jQuery 时的样子:

<a href="delete.php?id=22" class="confirmation">Link</a>
...
<!-- Include jQuery - see http://jquery.com -->
<script type="text/javascript">
    $('.confirmation').on('click', function () {
        return confirm('Are you sure?');
    });
</script>

38
投票

你也可以尝试这个:

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

19
投票

我建议避免内联 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 Fiddle 演示.

更新以上内容以减少空间,同时保持清晰度/功能:

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 Fiddle 演示.

有点迟来的更新,使用

addEventListener()
(按照bažmegakapa的建议,在下面的评论中):

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 Fiddle 演示.

上面将一个函数绑定到每个单独链接的事件;当您可以将事件处理(使用委托)绑定到祖先元素时,这可能非常浪费,如下所示:

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 Fiddle 演示.

因为事件处理附加到

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

参考资料:


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

1
投票

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>

演示页面


1
投票

使用 PHP、HTML 和 JAVASCRIPT 进行提示

如果有人在单个文件中寻找使用 php、html 和 javascript,下面的答案对我有用。我附上了使用引导程序图标“垃圾箱”的链接。

<a class="btn btn-danger" href="<?php echo "delete.php?&var=$var"; ?>" onclick="return confirm('Are you sure want to delete this?');"><span class="glyphicon glyphicon-trash"></span></a>

我在中间使用php代码的原因是因为我不能从一开始就使用它..

下面的代码对我不起作用:-

echo "<a class='btn btn-danger' href='delete.php?&var=$var' onclick='return confirm('Are you sure want to delete this?');'><span class='glyphicon glyphicon-trash'></span></a>";

我按照第一个代码对其进行了修改,然后我按照我需要的方式运行..我希望我可以帮助需要我的案例的人。


0
投票

如果您使用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);

或者对于旧版本的 Internet Explorer:

document.getElementById('mylinkid').attachEvent('onclick', myClickHandler);

0
投票

只是为了好玩,我将在整个文档上使用单个事件,而不是向所有锚标记添加事件:

document.body.onclick = function( e ) {
    // Cross-browser handling
    var evt = e || window.event,
        target = evt.target || evt.srcElement;

    // If the element clicked is an anchor
    if ( target.nodeName === 'A' ) {

        // Add the confirm box
        return confirm( 'Are you sure?' );
    }
};

如果您有很多锚标记,此方法会更有效。当然,当您将此事件添加到具有所有锚标记的容器时,它会变得更加高效。


0
投票

大多数浏览器不会显示传递给

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>

尝试更改示例中的输入值以预览其工作原理。


0
投票

内联代码:

<a href="delete.php?id=22" onclick="if(!confirm('Are you sure to Delete This?')){ event.preventDefault() }">Link</a>

如果你不想添加内联js,那么你可以使用这种方式。

外部代码:

html

<a href="delete.php?id=22" onclick="sureToDelete(event)">Link</a>

Javascript

    function sureToDelete(e){
        if(confirm('Are You sure you want to delete this?')){
            return true;
        }else{
            e.preventDefault();
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.