我使用jQuery的fullCalendar插件。
我在日历的select属性后面有一个事件:
$("#calendar").fullCalendar({
select: function(start,end,jsEvent,view){
doSomething();
}
});
select属性后面的事件是日历的整个day单元格的mouseup事件。
我试图在日历的一天单元格内放置一个按钮,但我无法获得按钮的单击事件。
我已经在stackoverflow上阅读了各种关于冒泡的提交,但这些解决方案都不起作用:
$("#testbutton").click(function(e){
e.stopPropagation();
doSomethingElse();
});
即使我从fullcalendar和所有相关代码中删除select属性(这会导致突出显示day单元格,但不触发事件),按钮的click事件仍然不会触发。
任何想法吗?
因为按钮是动态添加的,所以当前的jQuery注册将不会绑定。如果您使用"on"事件绑定,它将与动态元素一起工作。试试下面的内容:
//Replace ".dynamic-button-class" with a target that points to your button.
$(document).on("click", ".dynamic-button-class", function(e) {
e.preventDefault();
doSomething();
});
"on"语法绑定到所有匹配模式的DOM元素以及呈现时出现的元素。
请看这里:http://api.jquery.com/on/
和这里:动态创建元素的事件绑定?
您还需要避免重复的事件注册。通过将一个事件绑定到另一个事件中,您将在每次触发父事件时重新绑定事件,这可能不是您想要的。
可以考虑这样的解决方案:
//This method is registered once for all buttons with a "dynamic-button" class attribute and is triggered for each one clicked.
$(document).on("click", ".dynamic-button", function(e) {
//Load the values stored in the hidden fields.
var formStartDate = $(e.currentTarget).closest("input[name='StartDate']").val();
//etc...
$(document).trigger("calendar-button-clicked", {StartDate: formStartDate}); // Pass the form arguments as a JavaScript object to the calendar-button-clicked event hander
});
$(document).bind("calendar-button-clicked", function(e, data) {
//Do something with the values in data.
});
//Single event triggered when a calendar selection is made
$(document).bind("add-button", function(e, data) {
//Code that adds your button to the page here but also checks to see if the button has already been added.
//persist the values from Data into some kind of form hidden form fields.
console.log(data.StartDate);
});
$("#calendar").fullCalendar({
select: function(start, end, jsEvent, view){
$(document).trigger("add-button", {StartDate: start, EndDate: end, SourceEvent: jsEvent, View: view});
}
});
编辑:这里是一个快速的小提琴,我设置的工作和演示的概念。
http://jsfiddle.net/xDaevax/5282Q/try
$("#testbutton").click(function(e){
e.preventDefault();
doSomethingElse();
});