引用模块内部的特定表单元素

时间:2016-03-23 00:51:07

标签: javascript jquery this module-pattern

我试图找出如何在模块中引用表单。

该模块如下所示:

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)来引用特定的表单,但由于表单不再是该函数的直接调用者,因此它并不是'工作。

1 个答案:

答案 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);
      }
    });
  };