jQuery - html 链接包含 confirm(),从脚本中读取所选选项

jQuery - html link contains confirm(), read selected option from script

提问人:Tom 提问时间:11/16/2023 更新时间:11/17/2023 访问量:25

问:

我的 html 页面有一个提交按钮,如下所示:

<input type="submit" name="submit" value="Remove" class="remove" onclick="return window.confirm( Are you sure you want to remove this?)">

当用户单击此按钮时,我需要检测他们是否选择“确定”或“取消”。

我正在尝试使用在我的js脚本中运行的以下内容来执行此操作。

$("body").on('click', '.remove', function(e) {
    e.preventDefault()
    
    var _confirm_function = window.confirm;
    window.confirm = function() {
    
        var confirmed = _confirm_function.apply( window, arguments );
        console.log ( confirmed )
        
        if ( confirmed !== true ) {
            console.log ( "user pressed cancel: Some cleanup");
            return false
            
        } else {
            console.log ( "user pressed ok: Do tasks");
        }
    }
    
})

加载页面时,这似乎不会在第一次单击按钮时触发。第二次单击按钮时,它就可以工作,但即使它返回 false,它也会继续执行脚本并且不会返回 false。随后的按钮点击似乎多次触发。

我需要在单击按钮后立即运行它,如果选择了“取消”,它应该停止并且不再执行任何操作。

有什么办法可以做到这一点吗?

谢谢

jquery onclick 确认

评论


答:

-1赞 KIKO Software 11/16/2023 #1

您的代码似乎非常混乱,window.confirm() 本身已经返回一个布尔值,指示按下了哪个按钮。为什么不使用它呢?像这样的东西:

[HTML全文]

<input type="submit" onclick="removeSomething();">

JAVASCTIPT

function removeSomething()
{
    if (window.confirm("Are you sure you want to remove this?")) {
        // place code here to remove whatever you want to remove
    }
}

将此函数放在提交按钮中不太有意义。提交按钮通常是表单的一部分,并且,正如您的代码现在一样,无论用户的答案如何,都会提交此表单。如果没有表单,则不应使用提交按钮。另请参阅:HTML 提交按钮 onclick 代码

评论

0赞 Tom 11/17/2023
对不起,我应该清楚HTML代码已设置,我无法更改。我必须更改 js 脚本,看看我是否可以检测到单击了什么选项。
1赞 mplungjan 11/17/2023 #2

假设您的提交按钮(其名称不需要提交)位于表单中

$(() => { // page load
  const $button = $('[name=submit]'); // NEVER call anything submit in a form
  const $form = $button.closest('form')
  $button.prop('name', 'subbut');
  $button.prop('onclick', null); // remove confirm
  $form.on('submit', (e) => {
    const confirmed = confirm('Are you sure you want to remove this?');
    if (confirmed) {
      console.log("user pressed ok: Do tasks");
    } else {
      console.log("user pressed cancel: Some cleanup");
      e.preventDefault();
    }
  });

})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<form>
  <input type="submit" name="submit" value="Remove" class="remove" onclick="return window.confirm('Are you sure you want to remove this?')">
</form>

如果不在表单中,请将其设置为按钮:

$(() => { // page load
  const $button = $('[name=submit]'); // NEVER call anything submit in a form
  $button.prop('name', 'subbut');
  $button.prop('onclick', null); // remove confirm
  $button.type='button'
  $button.on('click', (e) => {
    const confirmed = confirm('Are you sure you want to remove this?');
    if (confirmed) {
      console.log("user pressed ok: Do tasks");
    } else {
      console.log("user pressed cancel: Some cleanup");
    }
  });

})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
  <input type="submit" name="submit" value="Remove" class="remove" onclick="return window.confirm('Are you sure you want to remove this?')">