Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止Ajax调用内JavaScript中的默认行为或标记单击事件_Javascript_Ajax_Addeventlistener_Preventdefault_Selectors Api - Fatal编程技术网

防止Ajax调用内JavaScript中的默认行为或标记单击事件

防止Ajax调用内JavaScript中的默认行为或标记单击事件,javascript,ajax,addeventlistener,preventdefault,selectors-api,Javascript,Ajax,Addeventlistener,Preventdefault,Selectors Api,过去我曾使用e.preventDefault()来取消单击事件,但我很难弄清楚为什么它在这种情况下不起作用。我为列中的所有a标记分配了一个类名,然后使用文档获取对它们的引用。queryselectoral(.classname),然后为每个a标记添加一个从服务器获取值的单击事件,如果未满足验证,则应阻止默认值并给出用户消息 (function(){ const userName = document.getElementById('FullName').value; // route $rou

过去我曾使用
e.preventDefault()
来取消单击事件,但我很难弄清楚为什么它在这种情况下不起作用。我为列中的所有a标记分配了一个类名,然后使用
文档获取对它们的引用。queryselectoral(.classname)
,然后为每个a标记添加一个从服务器获取值的单击事件,如果未满足验证,则应阻止默认值并给出用户消息

(function(){
const userName = document.getElementById('FullName').value;

// route
$route = '';
if (CheckDeploy(window.location.origin)) {
    $route = '/x/GetReviewerCheck/';
} else {
    $route = '/servername/s/GetReviewerCheck/';
}

let ReviewButtons = document.querySelectorAll('.verifyReviewer'); // .verifyReviewer = className of all a tags in table column

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 },
            success: function (data) {
                // if data is 1, prevent default
                if(data == 1){
                    e.preventDefault();
                    return false;
                }
            }
        });

    }, false);
}
})();
(函数(){
const userName=document.getElementById('FullName')。值;
//路线
$route='';
if(选中Deploy(window.location.origin)){
$route='/x/GetReviewerCheck/';
}否则{
$route='/servername/s/GetReviewerCheck/';
}
让ReviewButtons=document.querySelectorAll('.verifyReviewer');//.verifyReviewer=table列中所有a标记的类名
对于(变量i=0;i
它不工作,因为响应是异步的。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);
        }
    
    for(变量i=0;i
    它不工作,因为响应是异步的。e、 preventDefault()将仅在ajax调用从服务器获得响应后执行。