通常在頁面中要讓某些內容點擊后產生點擊事件(非頁面跳轉)都會使用onclick,但是這樣不適於需要傳遞參數的情況,於是寫成直接調用JavaScript函數的方式:<a href=javascript:somefunction(args)>content</a>。注意,這么寫是有問題的,問題就在於somefunction中的參數args的值不能含有空格,否則瀏覽器會認為空格后面的內容是<a>標簽的某個屬性,正確的寫法應該是用引號將javascript:somefunction(args)引起來。另外還有一種方法可不必加這對引號,先將可能帶空格的參數用escape函數處理一下,然后在somefunction中用unescape函數解碼就行了。值得注意的是用encodeURI、decodeURI加解碼卻不能成功。
在網上找了下escape和unescape、encodeURI和decodeURI、encodeURIComponent和decodeURIComponent三對組合之間的區別:
escape不編碼字符有69個:*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI不編碼字符有82個:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent不編碼字符有71個:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
簡單總結一下用法,在不經過URL的時候,即純Javascript調用用escape;涉及URL時,通常用encodeURI對整個URL進行處理,僅當URL中含有特殊參數時,對該特殊參數局部使用encodeURIComponent。
if(all.aData.photo != ""){
var a = escape(all.aData.wt);
return "<a onclick=\"infoOperation('" +a+"','"+all.aData.thly+"','"+all.aData.photo+"')\" href=\"#\" title = '查看所有'><font color=blue>" + all.aData.wt.substr(0 , 30)
+ "</font><img title='有圖片' src="+contextpath+"/business/question/images/ytp.jpg></a>";
}
else{
var a = escape(all.aData.wt);
return "<a onclick=\"infoOperation('" + a+"','"+all.aData.thly+"','"+all.aData.photo+"')\" href=\"#\" title = '查看所有'><font color=blue>" + all.aData.wt.substr(0 , 30)
+ "</font></a>";
}
function infoOperation(str,thyy,photo){
var url = encodeURI(contextPath+"/business/question/wtfk/wtfkxq.jsp?str="+str+"&thyy="+thyy+"&photo="+photo);
top.openDialog(contextPath+"/business/question/wtfk/wtfkxq.jsp?str="+str+"&thyy="+thyy+"&photo="+photo,{height:515,width:1100,title:"查看照片"});
}
var str =unescape($().getParmByUrl('str'));
var thyy = $().getParmByUrl('thyy');
var photo = $().getParmByUrl('photo');
