我编写了一个简单的上下文菜单,该菜单在单击无序列表的li
后出现。我需要在单击上下文菜单中的li
后显示警报,但没有任何反应。
我使用了jquery函数on
(替换了delegate()
),因为上下文菜单是在运行时动态生成的:
$(".contextMenu").on("click", "li", function() {
var c = $(this).attr("class");
alert("Klassname:" + c);
});
但没有任何反应。我现在很无能为力。
请将以下脚本添加到您的tampermonkey引擎并试用。
// ==UserScript==
// @name Burning Series
// @namespace http://bs.to/
// @version 1.0
// @description -
// @author Me
// @match https://bs.to/andere-serien
// @require https://code.jquery.com/jquery-3.3.1.min.js
// @grant GM_addStyle
// ==/UserScript==
GM_addStyle('.contextMenuParent { position: relative; }');
GM_addStyle('.contextMenuContainer { position: absolute; background: gray; z-index: 100; -webkit-box-shadow: 10px 10px 31px -1px rgba(0,0,0,0.75);-moz-box-shadow: 10px 10px 31px -1px rgba(0,0,0,0.75);box-shadow: 5px 5px 15px -1px rgba(0,0,0,0.75);}');
GM_addStyle('.contextMenu { display: grid; padding: 4px; top: 0; left: 25px; width: 200px; border: 1px solid black; color: black; }');
GM_addStyle('.contextMenu li { border-bottom: 1px solid gray; }');
GM_addStyle('.contextMenu li:hover { cursor: pointer; color: red; }');
var contextMenuLinks =
"<li class='contextMenu01'>A</li>"+
"<li class='contextMenu02'>B</li>" +
"<li class='contextMenu03'>C</li>" +
"<li class='contextMenu04'>D</li>" +
"<li class='contextMenu05'>E</li>" +
"<li class='contextMenu06'>F</li>";
$(document).ready(function() {
$("div.genre > ul > li").each(function(i, obj) {
$(this).addClass("contextMenuParent");
$(this).contextmenu(function(e) {
e.preventDefault();
$(".contextMenuContainer").remove();
$(this).append("<div class='contextMenuContainer'><ul class='contextMenu'>" + contextMenuLinks + "</ul></div>");
});
});
$(".contextMenu").on("click", "li", function() {
var c = $(this).attr("class");
alert("test:" + c);
});
});
Here是目标网页。
答案 0 :(得分:1)
因为您要通过<li>
方法添加append()
元素,这就是为什么li
元素上的click事件直接绑定而不是委托,意味着事件只有在元素是已经存在于DOM中而不是动态创建的元素
因此,您需要将 event delegation 绑定到更高级别的元素,例如body
或document
。
试试这个:
$(document).on("click", ".contextMenu li", function() {
var c = $(this).attr("class");
alert("Klassname:" + c);
});