尝试将事件处理程序附加到页面上的元素时遇到了一个小问题。
我附加处理程序的元素也是在运行时动态创建的,有些处理事件,有些不处理。
例如以下工作很好:
// Setup full screen button
fullscreenButton = document.createElement("img");
fullscreenButton.src = "/media/site-images/fullscreen.svg";
fullscreenButton.setAttribute("class", "fullscreenButton");
$(fullscreenButton).on("click", (function (video) {
return function () {
if (video.requestFullScreen) {
video.requestFullScreen();
} else if (video.webkitRequestFullScreen) {
video.webkitRequestFullScreen();
} else if (video.mozRequestFullScreen) {
video.mozRequestFullScreen();
}
};
}(this)));
视频可以全屏显示。但是,当我做这样的事情时:
// Setup the div container for the video
videoContainer = document.createElement("div");
videoContainer.setAttribute("class", "videoContainer");
$(this).wrap(videoContainer);
// When the hover leaves, hide the controls
$(videoContainer).on("mouseleave", (function (controlsBox) {
return function () {
$(controlsBox).fadeTo(400, 0);
$(controlsBox).clearQueue();
};
}(controlsBox)));
// If the video itself is clicked, play/pause the video
$(videoContainer).on("click", (function (vid, playPauseButton) {
return function () {
playPause(vid, playPauseButton);
};
}(this, playPauseButton)));
没有事件被触发。
我已经通读并使用了.on() jquery 之类的链接并没有成功地绕过它,但我对为什么一个动态元素与事件处理程序和其他不一起使用的区别感到困惑。
整个shebang的JSfiddle在这里:http: //jsfiddle.net/m4twG/1/(显然正在进行中)