1
$(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 });
}
}
});
});
當點擊按鈕的HEAD請求發送時,我已經得到了比click事件200響應再次被觸發,但這次fileExist選項不起作用。監聽器再次被調用(我檢查了這個)但沒有任何反應,就像e.preventDefault()仍然可以工作。有任何想法嗎?觸發事件()如預期
解決方案
觸發()方法會觸發jQuery的事件,但不會觸發默認行爲的瀏覽器,這在我的情況被重定向到另一個頁面。此代碼的工作:
$(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);
}
}
});
});
而不是重新觸發事件,爲什麼你不交換一個聲明的函數的匿名函數,然後只是重新調用它,可能通過preventDefault減輕問題? – Zze
我不認爲我理解你在這裏的意思......在200響應後,我只想要點擊鏈接的默認行爲。我已經更新了片段,也許現在它會更易讀 - 如果使用fileExist選項觸發匿名函數,則不會執行任何操作。 – tommy