我试图找出如何在模块中引用表单。
该模块如下所示:
const UserShows = (function(){
const saveShowToDashboard = function(evt) {
evt.preventDefault();
const $saveShowForm = $(this);
setTimeout(function() {
$saveShowForm.children('.save-show-btn').val('Saved');
}, 500);
const showInfo = $(this).children('.save-show-checkbox').val();
const parsedShowInfo = JSON.parse(showInfo);
const _csrf = $(this).children('.csrf').val();
const artistName = parsedShowInfo.artist;
const data = {
showInfo: parsedShowInfo,
_csrf: _csrf,
};
console.log(data);
$.post('/artists/' + artistName, data, function(res) {
if (res === '/login') {
window.location = res;
}else{
console.log(res);
}
});
};
return {
callSaveShowToDashboard: function(evt){
return saveShowToDashboard(evt);
}
}
})();
// Call saveShowToDashboard on click
$('.save-show').on('submit', UserShows.callSaveShowToDashboard);
我遇到的问题是,我无法弄清楚如何引用正在提交的特定保存节目表单(页面上有几个;每个对应一个艺术家巡演日期。)
在我决定将此函数放入UserShows模块之前,我能够使用$(this)来引用特定的表单,但由于表单不再是该函数的直接调用者,因此它并不是'工作。
答案 0 :(得分:0)
事实证明,使用JQuery,您可以使用 event.target 来引用触发事件的元素。因此,如果我重写这样的代码,它就可以工作:
const saveShowToDashboard = function(evt) {
evt.preventDefault();
const $saveShowForm = $(event.target);
setTimeout(function() {
$saveShowForm.children('.save-show-btn').val('Saved');
}, 500);
const showInfo = $saveShowForm.children('.save-show-checkbox').val();
const parsedShowInfo = JSON.parse(showInfo);
const _csrf = $saveShowForm.children('.csrf').val();
const artistName = parsedShowInfo.artist;
const data = {
showInfo: parsedShowInfo,
_csrf: _csrf,
};
console.log(data);
$.post('/artists/' + artistName, data, function(res) {
if (res === '/login') {
window.location = res;
}else{
console.log(res);
}
});
};