2014-04-01 20 views
0

我已经将事件绑定到单击图标上。该事件会更改页面上按钮的ID。我想要一个新事件绑定到该新ID,并绑定到旧ID的现有事件被解除绑定。我该怎么做呢?使用jquery更改按钮事件绑定

我可以从Firebug看到,单击图标时按钮ID成功更改。但是,当我查看POST时,发现id为“Final_Approval”的隐藏字段的值为“Approved”,它告诉我发生了与原始按钮ID相关的事件,而我不希望它发生。我所有的jquery都在文件准备好了。

原来的按钮:

<button id="btn-final-approval-no-review" class="btn btn-warning" type="submit">Final Approval</button> 

的原始事件绑定到该ID:

$('[id^="btn-final-approval"]').click(function() { 
    $("#Final_Approval").val("Approved"); 
}); 

事件触发点击图标时:

$("#add-vendor-item").click(function() { 
    $('#btn-final-approval-no-review').attr('id', 'btn-vendor-rep-review2'); 
} 

我的新事件想要发生:

$("#btn-vendor-rep-review2").click(function() { 
    $("#ItemRequestStatusId").val("@Portal.BusinessModel.Entities.ItemRequestStatusId.VendorRepReview"); 
}); 
+0

**不要更改ID **,也不要期望在页面加载上绑定的事件处理程序突然开始使用刚刚更改的元素。它在绑定时与选择器不匹配,所以它没有绑定,期限! – adeneo

回答

0

将事件绑定到动态变化的元素,你需要使用代表团on()

$(document).on('click', '[id^="btn-final-approval"]', function() { 
    $("#Final_Approval").val("Approved"); 
}); 

正如adeneo说,你可能不应该走动ID,您应该使用类。但同样的想法适用,您只需更改on()调用中的选择器。

+0

我还将此添加到绑定到原始ID的单击事件中。我将重写我的代码以使用类而不是id。 –

0

在委托上使用可以动态地绑定点击事件。

$("body").on("click","#btn-vendor-rep-review2", function() {  
    $("#ItemRequestStatusId").val("@Portal.BusinessModel.Entities.ItemRequestStatusId.VendorRepReview"); 
}); 
0
$(document).on('click', '#finalApproval', function() { 

if($(this).hasClass('first')){ 
    $(this).removeClass('first'); 
    //first action to be preformed  
}else{ 
    //second action to be preformed. 
} 


}); 

然后简单地添加first类网页加载的按钮。

如果你需要它来切换回你可以在第二个动作重新添加类first被预制面积 编辑

重新阅读你的问题可能不能使用this后 - 刚刚替补与有问题的项目的id/class并将if/else语句添加到该项目的处理程序。