它不起作用,因为响应是异步的。e.preventDefault()仅在ajax调用从服务器获得响应后才执行。你可以这样做。
- 阻止所有操作使用默认操作。
- 等待回应。
- 如果响应不是1,则取消绑定preventDefault()。
我已经更新了for循环,并评论了更改。请检查一下。
for (var i = 0; i < ReviewButtons.length; i++) { const ReviewButton = ReviewButtons[i]; ReviewButton.addEventListener('click', function (e) { let newRow = ReviewButton.parentElement.parentElement; let AuditorName = newRow.cells[2].innerText; let ReviewType = newRow.cells[8].innerText; let ReviewTypeID = 0; if (ReviewType == 'Peer Review') { ReviewTypeID = 3; } else if (ReviewType == 'Team Leader Review') { ReviewTypeID = 4; } else if (ReviewType == 'Supervisor Review') { ReviewTypeID = 5; } let id = newRow.cells[0].firstChild.getAttribute('id').split('_')[1]; $.ajax({ url: $route, type: 'POST', data: { userName: userName, auditor: AuditorName, reviewType: ReviewTypeID, recordID: id }, beforeSend:function() { e.preventDefault(); //Prevent default action for all instances. }, success: function (data) { // if data is 1, prevent default if(data != 1){ $(this).unbind('click'); // Restores the click default behaviour if data != 1 return false; } } }); }, false); }


