| 站点地图 | 联系我
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | 书签 | ASP.Net书签 | 上善若水 厚德载物
 现在位置 :: 主页 >> 资料中心 >> ROOT / CODE / B/S / JSP/Servlet /
 

点击url时画面没有响应的问题

来源(编程爱好者BLOG)

From: http://www.programfan.com/blog/article.asp?id=4142

点击url时画面没有响应的问题

点击数:113 发布日期:2005-8-25 10:40:00 【评论】【打印】【收藏此页到365Key】
电信机房P4服务器·6999/年·送产权蓝芒系统



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的动作了,不过可以寻求别的解决办法。




Link: http://www.asm32.net/article_details.aspx?id=183


浏览次数 494 发布时间 2005/12/22 13:46:51 从属分类 JSP/Servlet 【评论】【 】【打印】【关闭
 
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | 书签 | ASP.Net书签 | 京ICP备09029108号-1