节点js和jQuery / Ajax(Like / Different)

我正在从事我的练习/游戏项目(刚开始使用jQ和Ajax),问题是我无法得到我喜欢/不像button的工作(在我的应用程序中标记/取消标记)。

这是我的代码(也有一些节点js的东西,button,我认为这不是问题,因为它按预期工作(我可以保存“标记的东西”在我的数据库等)):

$('a.mark_button').on('click', function(event) { //marking a topic event.preventDefault(); $(this).html('Unmark').removeClass('mark_button').addClass('unmark_button'); $.ajax({ url: '/mark', type: 'POST', contentType: 'application/json', dataType: 'json', data: JSON.stringify({ id:$(this).attr('id') }), complete: function() { console.log('Process completed!'); }, success: function() { console.log('Successfully'); }, error: function() { console.log('Failed'); } }); }); $('a.unmark_button').on('click', function(event) { //unmarking a topic event.preventDefault(); $(this).html('Mark').removeClass('unmark_button').addClass('mark_button'); $.ajax({ url: '/unmark', type: 'POST', contentType: 'application/json', dataType: 'json', data: JSON.stringify({ id: $(this).attr('id') }), complete: function() { console.log('Process completed'); }, success: function() { console.log('Succesfully'); }, error: function() { console.log('Failed'); } }); }); 

所以详细地说,我的button,当你第一次点击它时,例如有button“MARK”,当你点击它应该做一个Ajax的东西(发布到我的服务器等,这是第一次)它应该改变button类,所以它可以performance得像一个“UNMARK”button(类似于Facebook的喜欢/不像系统),所以我可以取消标记,如果我意外标记它。 但它只是不工作,button样式的变化,在检查员,我可以看到,类也成功地更改为“unmark_message”,但新的“取消标记”button根本不工作。 当我点击它时,没有任何事情发生,它只是不会再次触发ajax行动。

如果您更改angular色,则会发生相同的情况(标记为取消标记button)。

你有两个function在这里。 一个function标记一个button,另一个function标记一个button。

你的代码的问题是它只将这两个函数中的一个附加到每个button上,这意味着每个button只能被标记(如果它本来是未标记的)或未标记的(如果它最初被标记的)。

您想要将这两个函数附加到每个button,并根据button的状态调用适当的处理程序。

 $('a.mark_button, a.unmark_button').on('click', function(e) { var $target = $(e.target); if ($target.hasClass('mark_button')) { onMarkedButtonClick($target); } else if ($target.hasClass('unmark_button')) { onUnmarkedButtonClick($target); } }); 

在上面的例子中, onMarkedButtonClickonUnmarkedButtonClick函数会调用您最初编写的点击处理程序。

这是一个JSFiddle,演示基本的标记/不标记。

https://jsfiddle.net/reid_horton/hwkfjx6a/