jquery 如何通过编程方式绕过return confirm()?

izkcnapc  于 2023-01-25  发布在  jQuery
关注(0)|答案(3)|浏览(207)

我有计时器功能,点击结束测试(提交)按钮后,时间得到这样的

var dur = $ {
     Schedule.duration
 };
 dur = dur * 60 * 1000;
 setTimeout(function () {
     $('#endtest5').click();
 }, +dur);

我在同一个提交按钮上也有确认函数,但我不想在时间结束时调用确认函数,或者在编程方式下单击EndTest时调用确认函数,我该怎么做?我的确认函数如下-

<input align="left" type="submit" name="end" value="End Test" id="endtest5" class="myButton" onclick="return confirm('Are you sure you want to continue')"/>
hc2pp10m

hc2pp10m1#

删除onClick属性并使用jQuery设置click事件处理程序。
然后设置 * 标记 *(testing)以确定click是否实际上是使用鼠标或函数执行的:

var testing = false;

$('#endtest5').click(function(){
    if(!testing){
        return confirm('Are you sure you want to continue');
    }
    testing = false;
});

var dur = $ {
    Schedule.duration
};
dur = dur * 60 * 1000;
setTimeout(function () {
    testing = true;
    $('#endtest5').click();
}, +dur);
jucafojl

jucafojl2#

.trigger()始终将isTrigger属性添加到事件对象。
您可以测试此属性,以检查事件是否由另一个jQuery函数触发(例如,您的计时器)。
如果你需要阻止提交,你可以使用event.preventDefault()测试confirm返回值。

//
// Remove the onclick inline event handler if you cannot do it by hand
//
$('#endtest5').removeAttr('onclick');


$('#endtest5').on('click', function(e) {
    if (e.isTrigger !== undefined) {
        // if timer triggers this event do nothing
        return;
    }
    var retVal = confirm('Are you sure you want to continue');
    // if cancel....no submit
    if (retVal == false) {
        e.preventDefault();
    }
})


//
// simulate a timer click: nothing will happen...
//
$('#endtest5').click();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<input align="left" type="submit" name="end" value="End Test" id="endtest5" class="myButton" onclick="return confirm('Are you sure you want to continue')"/>
vfhzx4xs

vfhzx4xs3#

将确认移动到函数,并创建一个变量来检查测试是否完成或结束,然后在运行确认之前检查该变量。

相关问题