正文

点击url时画面没有响应的问题2005-08-25 10:40:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/xueyb/4142.html

分享到:

1. 在jsp开发时,出现了个奇怪的问题:点击url时,画面没有任何响应,即不进入相应的业务画面。但是原来确是没有问题,都是正常的呀?

2. 经调查,发现在xxxxx.jsp有如下代码:
   <logic:equal name="list" property="selectFlag" value="true">
    <td>
      <html:link href="xxxxx.do" name="list" property="paramMap" onclick="js _Click();return false">
        <bean:write name="list" property="name" />
      </html:link>
    </td>
  </logic:equal>
  形成的html,如下:
  <A HREF="http://127.0.0.1:9080/xxx.do?index=4&id=18423301003" onclick=" js _Click();return false " > Link to something </A>

3.html对象A,onClick()方法的默认响应为如下:
  Initiates any action associated with the object. For example, if the user clicks an A object, the browser loads the document specified by the href property. To cancel the default behavior, set the returnValue property of the event object to FALSE.

  如2中,在onclick中return false会取消href的动作,应把return false修正为return true 或不返回任何值。

4. 到此,原因似乎已经找到,可是为什么原来确是没有问题的呢?而这个xxxxx.jsp却并没有修改过。原因分析:onClick的响应方法是没有错的。但是在onClick方法中返回false却能响应href,只有两种可能。

  1、 return值,被覆盖。比如,定义了document.onclick事件句柄,这样先执行本对象A的事件响应,在执行document的事件响应。
  2、 指定了event.returnValue。在没有显式的制定时间的返回值时, js会把click方法中的返回当作事件的返回值,如果,指定了其值,就不会根据它来设定。

5. 发现jsp中有如下定义:
  <script src="js/ShortcutKeyCtrl.js" type="text/javascript"></script>
6.在ShortcutKeyCtrl.js中,有如下:
  document.onkeydown    = keydown;
  document.onclick      = keydown;
  document.onmousewheel = keydown;

  可见,在document中以定义了对onclick的响应。
vararrKeyType1=newArray("93",//')'
"114",//'F3'
"116",//'F5'
"117",//'F6'
"122"//'F11'
);
//Ctrlkey
vararrKeyType2=newArray("78",//'N'
"68",//'D'
"69",//'E'
"72",//'H'
"76",//'L'
"87",//'W'
"82",//'R'
"73",//'I'
"79",//'O'
"116",//'F5'
"117",//'F6'
"9",//'Tab'
"66"//'B'
);
//Shiftkey
vararrKeyType3=newArray("121",//'F10'
"117"//'F6'
);

//Ctrlkey+Shiftkey
vararrKeyType4=newArray("9",//'Tab'
"117"//'F6'
);

functionkeydown(e){
//onlyShiftKeyorCtrlKey,donothing
if(event.keyCode=='16'||event.keyCode=='17'){
}else{
vararrKey=newArray(0);
varonKey=event.keyCode;

variOptionKey=0;
if(event.shiftKey){iOptionKey=iOptionKey+SHIFT_KEY;}
if(event.ctrlKey){iOptionKey=iOptionKey+CTRL_KEY;}

switch(iOptionKey){
case0:
//BSKey
if(backSpaceKeyCtrl(onKey)==false){
event.keyCode=0;
returnfalse;
}else{
arrKey=arrKeyType1;
break;
}

//ShiftKey
case1:
//BSKey
if(backSpaceKeyCtrl(onKey)==false){
event.keyCode=0;
returnfalse;
}else{
arrKey=arrKeyType3;
break;
}

//CtrlKey
case2:
arrKey=arrKeyType2;
break;

//CtrlKey+ShiftKey
case3:
arrKey=arrKeyType4;
break;

default:
break;
}

for(vari=0;i<arrKey.length;i++){
if(parseInt(arrKey[i])==onKey){
event.keyCode=0;
return(false);
}
}
}
returntrue;
}

functionbackSpaceKeyCtrl(keyCode){
//BSKey
if(keyCode=='8'){
vare=document.activeElement;
if(e!=null){
if(e.type=='text'||e.type=='textarea'||e.type=='password'){
if(e.disabled==true){
returnfalse;
}
if(e.readOnly==true){
returnfalse;
}
}else{
returnfalse;
}
}
}
returntrue;
}
7. 可见,如果定义了document.onclick = keydown; 就会在执行了对象A的click方法后,再执行document的click方法,而返回的就是true了。故还能响应href的动作;如果没有document.onclick = keydown; 那么就不能响应href的动作了,不过可以寻求别的解决办法。

阅读(3475) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册