我想要的是更改按钮类别和值以更改按钮功能。
正在发生的事情是价值和类成功更改但功能与旧类相同 为什么?!
浏览器是否将jquery代码存储在某处并从中加载?!如何在那种情况下刷新它?
这是我的代码: (我正在使用带有html和php的Jquery Ajax)
var target_button; // global variable to store the target button
$(".activateButton").click(function(){
var serial_number = $(target_button).attr("id");
var cvc = $("#cvc").val();
$.ajax({
type: "GET",
url: '../ajax/tag.php',
data:
{
s: serial_number,
c: cvc
}
}).done(function(data)
{
var result = jQuery.parseJSON(data);
if (result == "1")
{
$("#message").text('Tag Successfully Activated');
$("#overlay_form").fadeOut(500);
$(target_button).attr("value", "Disable");
$(target_button).removeClass("popActivateButton"); //<---------- REPLACING THE CLASS
$(target_button).addClass("enableDisableButton"); //<----------
}
这是按钮:
if($tags[$i]['Status'] == 1){
$button = "<input type=\"button\" class=\"enableDisableButton\" id=\"".$tags[$i]['SerialNumber']."\" value=\"Disable\"/>";
}
if($tags[$i]['Status'] == 2){
$button = "<input type=\"button\" class=\"popActivateButton\" id=\"".$tags[$i]['SerialNumber']."\" value=\"Activate\"/>";
}
答案 0 :(得分:0)
使用选择器时,它会选择执行代码时匹配的所有元素。以前称为选择器 - 即使是缓存 - 当匹配它们的新元素添加到页面时,不会动态更新。
如果你将事件处理程序绑定到元素上,那么它们将会一直存在,直到你为止。删除事件处理程序,或b。完全删除元素。只是更改类不会神奇地改变绑定的事件处理程序。
我建议改为使用事件委派:
$(document).on('click', '.enableDisableButton', function() {
//your code for enableDisableButton
}).on('click', '.popActivateButton', function() {
// your code for popActivateButton
});
使用事件委派时,会在触发事件时检查选择器,而不是在代码执行时检查选择器,因此将反映对页面的更改。
请注意,我在上面的代码示例中使用了document
。但是,您应该使用一个静态元素的选择器(一个不会被删除的元素),它将包含您想要执行事件处理函数的元素; DOM结构越接近动态元素越好。
答案 1 :(得分:0)
是的,一旦分配了事件,您需要清除之前的事件并将新事件绑定到每个事件。
假设您有button
并且您已分配click
事件,那么很遗憾您想要清除click event
以及其他可以执行此操作的内容,如下所示
$(SOMESELECTOR).unbind('previous_event').bind('new_event');
。
有关jQuery bind and unBind
的更多搜索。