我有一个表,有很多元素。它是一个有事件的日历,每个事件都有自己的ID号,以及三种不同类别之一,我们称之为a, B和c。
现在,出于样式的原因,类别也实现了CSS-classes,它们具有相同的名称。
我已经搜索了一点关于如何实现一个"右键点击监听器"与javascript/JQuery。我尝试了几种不同的解决方案,然后决定重写上下文菜单功能,即右键通常会触发。我还能够通过传递参数来区分类别,只有在单击A, B和C的元素时才应该覆盖上下文菜单。下面的代码可以很好地工作:
$(document).on("contextmenu", (".A, .B"), function(e) {
$.colorbox({width:"554px", height:"480px", iframe:true, href:"myurl"});
return false;
});
$(document).on("contextmenu", (".C"), function(e) {
$.colorbox({href:"myurl"});
return false;
});
colorbox,如果不熟悉它,它只是一个弹出窗口,作为我的日历事件的编辑器实现。然而,我希望传递点击的识别号码的来源,我还没有能够找到如何。这些ID是唯一的。
:
- 我可以通过这个函数传递参数吗?
- 如果是,怎么做?
- 如果没有,或者如果重写上下文菜单是一种不好的方式,它应该怎么做?
如果有任何相关性,这是Java web应用程序的一部分。我在编码时使用jstl和jsp。
谢谢。编辑:
有两个函数。顶部是我在一些复选框上使用的changellistener,它们可以工作。底部是覆盖的上下文菜单,但它不起作用。不知何故,$函数似乎脱离了父函数,并忽略了之后的所有内容。返回语句不起作用,出现了上下文菜单。
$(document).ready(
function() {
$('.toggle').change(function() {
var id = this.value;
$('.' + id).toggle(this.checked);
});
});
$(document).ready(
function(){
$(".A, .B").contextmenu(function() {
var id = $(this).Attr("class");
alert(id);
return false;
});
});
编辑2:
换句话说,我只是解决了我自己的问题。即便如此,我也只是回答了自己的问题。我已经弄清楚了如何传递至少一个参数,但它仍然需要是给定html元素的集合参数之一,这次是。我将所需的标识号设置为元素id,并像这样检索值:$(document).ready(
function(){
$(".A, .B").contextmenu(function() {
var id = this.id;
alert(id);
return false;
});
});
但是,我觉得这是一种笨拙的实现"onrightclicklistener"的方式,特别是与我在SWING中使用的方式相比。我不回答这个问题,也许有人知道更好的解决办法。
五年过去了,我想是时候回答我自己的问题了。
//my standard settings object, only relevant to colorbox
var popup_settings = {
opacity : "0.6",
width : "554px",
height : "640px",
iframe : true
}
//executes when the document has finished loading
$(document).ready(function(){
//ovverrides right click function
$(".A, .B").contextmenu(function() {
var id = $(this).attr("data-value");
var settings.href = "myURL?id=" +id; //adds the parameter directly in the URL
$.colorbox(calendarelement_editor_settings);
return false;
});
});
这显然是一个特定的颜色盒设置,但很多代码是相关的任何设置。当您通过jquery将函数绑定到事件时,就像我在这里对contextmenu
所做的那样,单击的特定元素可以通过this
访问。所有的jquery函数都可以通过$(this).anythingInTheAPI();
在元素上使用,就像获得属性数据值一样,在我的情况下。
任何其他功能,如$(this).hide()
,也可用。
现在我有了想要传递的属性,下一步是将其包含在新页面的请求中。这个弹出窗口会在模态容器中打开一个单独的页面。有许多方法可以做到这一点,但最简单的方法是将参数直接包含为URL的一部分,并实现期望它的后端。要在url中包含参数,可以写入
myURL?firstName=firstValue&SecondName=SecondValue
问号表示后面有参数。&
是参数之间的分隔符