我们知道在PB C/S下对数据窗口采用右键菜单是很简单的事。但到了B/S下虽然也可以使用右键菜单,可是频繁的CALLBACK会造成屏幕抖动很厉害。那么有没有什么方法可以让我们继续使用右键菜单呢?答案是肯定的。那就是使用JS来实现。
右键菜单的思路:
1:在PBWEBFROM的数据窗口中允许客户端调用数据窗口右键菜单。那么我们在OPEN中对数据窗口右键进行JS脚本定义,以便来使用JS来控制数据窗口的右键菜单。具体方法我不提了。相信大家都会。
2:插入几个按钮,在按钮的CLICK中写上相应的脚本。这样做的目的是当选择右键菜单中的菜单项时我们要调用按钮中的事件来进行相关操作。
在JS脚本中我们将调用JS的CREATEPOPUP函数来创建右键菜单。
代码如下:
function mouserbuttonclick(sender, rowNumber, objectName){ //创建弹出页面 var vpop = window.createPopup() //创建弹出菜单函数 function popmenu(){ /***其实当这个函数写完并测试后我突然想到我们能否将数据窗口内的内容导出成一个标准的HTML? 之后我们对这个HTML来进行分析来得到菜单的内容?这样是不是就可以不用采用循环来 过滤菜单的内容。因为仔细分析PB的B/S下的代码我们可以看到所有的数据都被先建立一个DIV层,完了 各项值和属性都在SPAN标签内。那么标准的HTML分析起来应该会简单的多。一下代码可能有不妥之处。请各位完善。 ***/ //得到弹出菜单的BODY标签内容 var pmenu = vpop.document.getElementsByTagName("body")[0]; //设置菜单的背景色 // pmenu.style.backgroundColor = "#d8e4f8"; //设置菜单的字体大小 pmenu.style.fontSize = "10pt"; //字体 pmenu.style.fontFamily = "宋体"; //背景色 pmenu.style.backgroundColor="#F0FFFF"; //字体颜色 //pmenu.style.font.color="#ffffff"; //定义菜单菜单项 vpop.document.getElementsByTagName("body")[0].innerHTML = objdw_3_datawindow.innerHTML; //得到菜单的SPAN标签 var f = vpop.document.getElementsByTagName("SPAN"); //对SPAN标签内容进行过滤 for(i=1;i<f.length;i++){ //对SPAN的值小于3的对象进行属性和动作的定义 if (f[i].innerHTML.length<3){ //创建单击函数 f[i].onclick=menuclick; } } //在右击的地方显示菜单 vpop.show(window.event.x,window.event.y,70,56,document.getElementsByTagName("body")[0]) }
其中的菜单项我们可以定义一个数据窗口。将数据窗口的内容赋值给弹出的窗口。这样我们再对弹出的窗口进行美化和设置。最后一个标准的右键菜单就出来了。
如图:
全部代码如下:
function mouserbuttonclick(sender, rowNumber, objectName){ //创建弹出页面 var vpop = window.createPopup() //创建弹出菜单函数 function popmenu(){ /***其实当这个函数写完并测试后我突然想到我们能否将数据窗口内的内容导出成一个标准的HTML? 之后我们对这个HTML来进行分析来得到菜单的内容?这样是不是就可以不用采用循环来 过滤菜单的内容。因为仔细分析PB的B/S下的代码我们可以看到所有的数据都被先建立一个DIV层,完了 各项值和属性都在SPAN标签内。那么标准的HTML分析起来应该会简单的多。一下代码可能有不妥之处。请各位完善。 ***/ //得到弹出菜单的BODY标签内容 var pmenu = vpop.document.getElementsByTagName("body")[0]; //设置菜单的背景色 // pmenu.style.backgroundColor = "#d8e4f8"; //设置菜单的字体大小 pmenu.style.fontSize = "10pt"; //字体 pmenu.style.fontFamily = "宋体"; //背景色 pmenu.style.backgroundColor="#F0FFFF"; //字体颜色 //pmenu.style.font.color="#ffffff"; //定义菜单菜单项 vpop.document.getElementsByTagName("body")[0].innerHTML = objdw_3_datawindow.innerHTML; //得到菜单的SPAN标签 var f = vpop.document.getElementsByTagName("SPAN"); //对SPAN标签内容进行过滤 for(i=1;i<f.length;i++){ //对SPAN的值小于3的对象进行属性和动作的定义 if (f[i].innerHTML.length<3){ //创建单击函数 f[i].onclick=menuclick; } } //在右击的地方显示菜单 vpop.show(window.event.x,window.event.y,70,56,document.getElementsByTagName("body")[0]) } function menuclick(){ var a = vpop.document.parentWindow.event.srcElement; if (a.NAME=='compute_1_0'){ a.onclick=buttona; }else{ alert(); }; // a.onclick = function(){buttona()} }; //执行函数 popmenu(); } //定义BUTTON控件事件 function buttona(){ var butn = document.getElementById("WW_0_C_cb_2"); butn.click(); }