Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.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
Javascript 在preventDefault()之后触发事件不会';I don’我没有按预期工作_Javascript_Jquery - Fatal编程技术网

Javascript 在preventDefault()之后触发事件不会';I don’我没有按预期工作

Javascript 在preventDefault()之后触发事件不会';I don’我没有按预期工作,javascript,jquery,Javascript,Jquery,单击按钮时,发送头部请求,当我收到200个响应时,再次触发单击事件,但这次使用fileExist选项。监听器再次被调用(我检查了这个),但什么也没发生,就像e.preventDefault()仍然可以工作一样。有什么想法吗 解决方案 trigger()方法将触发jQuery事件,但不会触发浏览器的默认行为,在我的例子中,浏览器是重定向到另一个页面。此代码适用于: $(document).on('click', '[data-toggle="if-exist"]', function (e, op

单击按钮时,发送头部请求,当我收到200个响应时,再次触发单击事件,但这次使用fileExist选项。监听器再次被调用(我检查了这个),但什么也没发生,就像e.preventDefault()仍然可以工作一样。有什么想法吗

解决方案 trigger()方法将触发jQuery事件,但不会触发浏览器的默认行为,在我的例子中,浏览器是重定向到另一个页面。此代码适用于:

$(document).on('click', '[data-toggle="if-exist"]', function (e, options) {
    options = options || {};

    if (options.fileExist) {
        return true;
    }

    var target = e.currentTarget;
    var fileId = $(this).data('file');
    e.preventDefault();

    $.ajax({
        url: Routing.generate('checkFile', {file: fileId }),
        type: 'HEAD',
        statusCode: {
            404: function () {
                alert('File does not exist');
            },
            200: function () {
                $(target).trigger('click', { 'fileExist': true });
            }
        }
    });
});

使用e.stopImmediatePropagation();要停止对ajax的多次调用,请使用e.stopImmediatePropagation();停止对ajax的多次调用。

与其重新触发事件,不如将anon函数替换为声明的函数,然后重新调用它,这样可能会缓解preventDefault的问题?我不明白您在这里的意思。。。在200个响应之后,我只需要单击链接的默认行为。我已经更新了代码段,也许它现在更可读了-如果使用fileExist选项触发匿名函数,它将不会执行任何操作。与其重新触发事件,不如将anon函数替换为声明的函数,然后重新调用它,有可能缓解违约问题?我不明白你在这里的意思。。。在200个响应之后,我只需要单击链接的默认行为。我已经更新了代码段,也许现在它更可读了-如果用fileExist选项触发匿名函数,它就不会做任何事情。是的,但这不是我想要实现的。我没有遇到多个ajax调用的问题;)是的,但这不是我想要的。我没有遇到多个ajax调用的问题;)
$(document).on('click', '[data-toggle="if-exist"]', function (e) {
    var target = this;
    var fileId = $(this).data('file');
    e.preventDefault();

    $.ajax({
        url: Routing.generate('checkFile', { file: fileId }),
        type: 'HEAD',
        statusCode: {
            404: function () {
                alert('File does not exist');
            },
            200: function () {
                var event = document.createEvent('MouseEvents');
                event.initEvent('click', false, false);
                target.dispatchEvent(event);
            }
        }
    });
});