当前位置: 首页 > 面试题库 >

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

裴展
2023-03-14
问题内容

e.preventDefault()过去曾使用过取消click事件的方法,但是在弄清楚为什么它在这种情况下不起作用的问题上,我遇到了麻烦。我将所有标签分配到具有类名的列中,然后使用来获取对它们的引用document.queryselectorAll(.classname),然后为每个标签添加一个click事件,该事件从服务器获取值,如果未达到验证条件,则应阻止默认操作并提供用户消息。

(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);
}
})();

问题答案:

它不起作用,因为响应是异步的。e.preventDefault()仅在ajax调用从服务器获得响应后才执行。你可以这样做。

  1. 阻止所有操作使用默认操作。
  2. 等待回应。
  3. 如果响应不是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);
    }


 类似资料:
  • 问题内容: 在通过单击发送按钮或在一段代码的消息文本字段中按Enter的方法中,我有以下代码。 最后的代码使文本区域空白。但是,通过按Enter键发送消息后,文本框将包含换行符,而不是为空。 我的猜测是,在事件处理程序运行之后,然后添加了换行符。如何停止添加换行符? 问题答案: 致电后尝试添加

  • 当我在标记中单击时,警报消息是:未定义 但是如果我把它放在变量映射中,它就起作用了!(显示经纬度) 有人知道为什么它在标记器里不起作用吗?

  • 本文向大家介绍在React中怎么阻止事件的默认行为?相关面试题,主要包含被问及在React中怎么阻止事件的默认行为?时的应答技巧和注意事项,需要的朋友参考一下 event.preventDefault();阻止浏览器默认行为, 例如标签不跳转 event.stopPropagation();阻止冒泡; 例如上级点击事件不生效

  • 问题内容: 如何防止onclick方法中的默认设置?我有一个传递自定义值的方法 问题答案: 让您的回调返回并将其传递给处理程序: 但是,要创建可 维护的 代码,您应该避免使用_“内联Javascript”_(即直接位于元素标签内的代码),并通过包含的Javascript源文件(称为unobtrusiveJavascript)修改元素的行为。 标记: 代码(单独的文件):

  • 我有一个父pom,它为我的其他组件提供所需的版本号变量 您必须使用分类器将补充工件附加到项目中,而不是替换它们 我发现这是因为jar打包固有的maven jar插件默认绑定,但我正在进行war打包,所以在war打包之后,默认jar执行开始并抛出上面的一个。任何停止违约的解决方案都将帮助我提前感谢。

  • 本文向大家介绍切记ajax中要带上AntiForgeryToken防止CSRF攻击,包括了切记ajax中要带上AntiForgeryToken防止CSRF攻击的使用技巧和注意事项,需要的朋友参考一下 经常看到在项目中ajax post数据到服务器不加防伪标记,造成CSRF攻击 在Asp.net Mvc里加入防伪标记很简单在表单中加入Html.AntiForgeryToken()即可。 Html.A