網頁制作poluoluo文章簡介:今天在公司給別的同事改bug,其中一個是window.location.href 不起作用
今天在公司給別的同事改bug,其中一個是window.location.href 不起作用
alert(”ok”)
window.location.href = ‘/event/index.php?from_city=’ + site;
上面的alert(”ok”);是不跳轉後用來調試的,頁面反映為現實url的值,但不進行跳轉,分析思路是window.location.href出問題,所以嘗試了常用的調試方式,比如:
判斷是否是在包含頁裡面:采用
window.parent.location.href=url; //這個完全否決,因為不是這種情況
采用 window.href location.href document.href均無效
於是跳出判斷函數內部出錯,分析頁面出發該函數的事件,原來是這樣的:
<a href=”javascript:void(0)” onclick=”changeSite(’200′)”>
發現問題:<a href=”javascript:void(0)” ,於是修改為:
<a href=”javascript:changeSite(’200′)”>
於是一切正常!
為什麼會發生這個問題呢?我們來看看javascript:void(0) :
JavaScript中void是一個操作符,該操作符指定要計算一個表達式但是不返回值。
void 操作符用法格式如下:
1. javascript:void (expression)
2. javascript:void expression
expression 是一個要計算的 JavaScript 標准的表達式。表達式外側的圓括號是可選的,但是寫上去是一個好習慣。 (實現版本 Navigator 3.0 )
你可以使用 void 操作符指定超級鏈接。表達式會被計算但是不會在當前文檔處裝入任何內容。
下面的代碼創建了一個超級鏈接,當用戶點擊以後不會發生任何事。當用戶點擊鏈接時,void(0) 計算為 0,但在 JavaScript 上沒有任何效果。
<A HREF=”javascript:void(0)”>單擊此處什麼也不會發生</A>
下面的代碼創建了一個超級鏈接,用戶單擊時會提交表單。
<A HREF=”javascript:void(document.form.submit())”>
單擊此處提交表單</A>
對於jquery 和yui等前端框架來說他們都有阻止默認事件的方法,在調用window.location.href 等其他重定向方法之前阻止掉連接的默認事件就可以哈
比如
$(’#changesite-panel a.city’).click(function(ev){
ev.preventDefault();
changeSite($(this).attr(’rel’));
});
function changeSite(site){
window.location.href = ‘/event/index.php?from_city=’ + site;
}
})();