在preventDefault()之后触发事件并不按预期工作

时间:2017-02-25 12:06:21

标签: javascript jquery

DispatchQueue.global(qos: .background).async {
        self.doInBackground()

当点击按钮时,发送HEAD请求,当我得到200响应时,再次触发click事件,但这次是使用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 });
            }
        }
    });
});

1 个答案:

答案 0 :(得分:0)

使用e.stopImmediatePropagation();停止多次调用ajax。