微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用.preventDefault() – javascript合并两个类似的函数

我有两个类似的功能,功能完成和功能删除.

我想将它们合并在一起,但我不知道如何正确合并它们.
我在后端为PHP做了但是对于javascript我不能让它工作.

我有这两个按钮的jquery让我们说

我从这样的东西开始工作正常并没有错,但我想将它们合并在一起会很好,因为它们非常相似.

  $('ol#textField').on('click', '.done-btn', doneButton);
  $('ol#textField').on('click', '.delete-btn', deleteButton);

我的deleteButton和doneButtion函数

function deleteButton(e){
    e.preventDefault();

    var $clicked = $(this);
    var $cLI = $clicked.closest('li');
    var todoText = $cLI.clone().children().remove().end().text();
    var getID = $cLI.attr('id');

    $.ajax({
                // codes
        }
    });
}

function doneButton(e){
    e.preventDefault();

    var $clicked = $(this);
    var $cLI = $clicked.closest('li');
    var $cSpan = $clicked.closest('span');
    var todoText = $cLI.clone().children().remove().end().text();
    var getID = $cLI.attr('id');

    $.ajax({
            //codes
        }
    });
}

看到他们是一样的,但当然除了ajax部分,我没有添加,因为它将是太多的代码,我不认为这些代码是任何问题.

所以我尝试这样的东西来组合它们但不起作用.

$('ol#textField').on('click', '.done-btn', doubleD('done'));
$('ol#textField').on('click', '.delete-btn', doubleD('delete'));

我试着像这样组合这个功能.所以如果参数完成,那么将调用done ajax并且参数是delete,然后将调用delete.我还想将.preventDefault()添加函数中,但不知道如何完成它们.

function doubleD(action){
      var $clicked = $(this);
      var $cLI = $clicked.closest('li');
      var todoText = $cLI.clone().children().remove().end().text();
      var getID = $cLI.attr('id');

      if(action == 'done'){
          var $cSpan = $clicked.closest('span');
          $.ajax({
                // ajax for done
              }
          });
      }

      if(action == 'delete'){
          $.ajax({
                // ajax for delete
              }
          });
      }
  }

有人可以帮我一把吗?

感谢您的时间和关注.

解决方法:

问题是jQuery没有将你的参数传递给处理程序.您必须将其添加为事件数据.参考:http://api.jquery.com/on/

试试这个:

$('ol#textField').on('click', '.done-btn', { action: 'done' }, doubleD);
$('ol#textField').on('click', '.delete-btn', { action: 'delete' }, doubleD);

然后你会这样访问:

function doubleD(evt){
  var action = evt.data.action; // ACCESS THE ParaMETER HERE

  var $clicked = $(this);
  var $cLI = $clicked.closest('li');
  var todoText = $cLI.clone().children().remove().end().text();
  var getID = $cLI.attr('id');

  if(action == 'done'){
      var $cSpan = $clicked.closest('span');
      $.ajax({
            // ajax for done
          }
      });
  }

  if(action == 'delete'){
      $.ajax({
            // ajax for delete
          }
      });
  }
}

我不建议这样做,但你也可以像这样写:

$('ol#textField').on('click', '.done-btn', function () {
    doubleD('done');
});
$('ol#textField').on('click', '.done-btn', function () {
    doubleD('delete');
});

然后,你的原始doubleD函数将工作.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐