2010-08-13 45 views
1

嘿家伙,我有一个小按钮的功能,没有犯错,但也没有工作。 addItem被调用的很好,并将类从“add-button”切换到“in-cart-button”,但$(“a.in-cart-button”)。click(...似乎没有被射击。当我点击“正在购物车按钮”,而是再次触发的addItem功能...任何想法?使用jQuery来回更改类?

function addItem(t_id) { 
    $("#" + t_id).addClass("in-cart-button").removeClass("add-button"); 
} 

function removeItem(t_id) { 
    $("#" + t_id).addClass("add-button").removeClass("in-cart-button"); 
    alert("Remove item with id: " + t_id); 
} 

$("a.add-button").click(function(event) { 
    event.preventDefault(); 
    addItem(event.target.id); 
}); 

$("a.in-cart-button").click(function(event) { 
    event.preventDefault(); 
    removeItem(event.target.id); 
}); 

谢谢!

回答

6

代替.click()结合时的元素他们最初被发现(他们最初是通过哪些类别),您需要在此处使用.live(),如下所示:

$("a.add-button").live('click', function(event) { 
//and 
$("a.in-cart-button").live('click', function(event) { 

随着.click()当元素的类更改它不会影响处理程序,所有重要的是当您调用$("a.add-button")$("a.in-cart-button")哪些元素有类时,它发现元素并绑定到那些...什么发生在元素之后并不重要,处理程序绑定到元素,而不是类。随着.live()它检查类,当你点击:)

+0

不知道,谢谢你的澄清,这完美的作品!赞赏。 – TwstdElf 2010-08-13 17:43:04

+0

@TwstdElf - Welcome :) – 2010-08-13 17:44:53

+0

.live()现在不推荐使用.on()代替!和平。 – ColossalChris 2015-02-04 00:38:12

1

这是因为当页面加载,in-cart-button不在页面上,所以处理程序没有附加。

仅使用toggleClass()的一个函数。

function toggleItem(event) { 
    $("#" + t_id).toggleClass("add-button in-cart-button"); 
} 

$("a.add-button").click(function(event) { 
    event.preventDefault(); 
    toggleItem(event.target.id); 
}); 

其他选项是使用.toggle()代替.click()它接受2(或更多)的功能。

此外,您可以将该函数的引用作为.click()处理函数传递,并且仍然可以访问event对象。

function toggleItem(event) { 
    event.preventDefault(); 
    var $target = $("#" + event.target.id); 
    $target.toggleClass("add-button in-cart-button"); 
    if($target.hasClass('in-cart-button')) 
     alert("Remove item with id: " + t_id); 
} 

$("a.add-button").click(toggleItem); 
+0

我认为OP在这两种方法中做了额外的工作,例如'alert()'...但你可以在这种情况下将'this'传递给方法:) – 2010-08-13 17:43:55

+0

@Nick - 可能是。 OP可以在下一行执行'.hasClass()'来获取函数中的状态。我觉得ID是''元素的ID,这当然会更简化。 – user113716 2010-08-13 17:48:25

0

尝试现场事件连接到<a/>元素。

看到this