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

时间:2017-04-28 14:35:43

标签: javascript jquery jsp

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

 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')"/>

3 个答案:

答案 0 :(得分:1)

删除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);

答案 1 :(得分:1)

.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')"/>

答案 2 :(得分:0)

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