台灣最大程式設計社群網站
線上人數
859
 
會員總數:246713
討論主題:190131
歡迎您免費加入會員
討論區列表 >> Java Script/ Node.js >> 轉址後程式卻依舊往下跑?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
轉址後程式卻依舊往下跑?
價值 : 30 QP  點閱數:1602 回應數:7
樓主

偶是大衛
中級專家
3250 120
3198 507
發送站內信

頁面a.htm的script中

chk();
alert("test");


function chk() {
var accid=XXXXXXX;
if (accid == "") { alert("帳號未設定!!"); locatioin.href='b.htm'); }
}


請問大大門要如何讓程式在chk()之後就執行轉址,不會再繼續往下執行alert("test");

本篇文章發表於2012-12-26 16:51
1樓
回應

香帥
檢舉此回應
可用如下程式碼

測試網址在
http://ap.a168a.com/test/linkb2.aspx
本篇文章回覆於2012-12-26 20:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

偶是大衛
檢舉此回應
dear 香帥
return false我之前測過了,他還是會執行的喔

因為function是一開始就要呼叫的
您可以擺在<body onload="aaa();">,如下範例code,他會先alert dddd之後再轉址,證明是會往下跑的


ex:
<body onload="aaa();">
<p><script>alert("dddd");</script></p>
</body>
<script>
function aaa() {
if (chk()) return;
alert("test");
}
function chk() {
var accid = "";
if (accid == "")
{ alert("帳號未設定!!"); location.href = "http://www.google.com.tw"; return true; }
}
</script>
本篇文章回覆於2012-12-27 09:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

Solty
檢舉此回應
證明你妹...
aaa(),是綁在onload事件觸發的,會比alert('dddd')還要晚執行
所謂的body onload是指在<body></body>中的東西都載入後才執行
你的問題是源自認知上的錯誤
範例過於簡單,單純處理這個先後順序,會有很多解法
但不一定合乎你的需求,詳細點吧
本篇文章回覆於2012-12-27 11:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

偶是大衛
檢舉此回應
很抱歉我沒描述清楚,2F的範例是延伸香帥的CODE舉例的

正確如下,在head中就去跑JS,call test.js中的判斷函式aaa()進行帳號驗證,aaa()就是負責驗證轉向
<script type="text/javascript" src="test.js"></script>
<script type="text/javascript">
aaa();

....dosomething
</script>

執行後....do something的code也都會執行

不知是否可以讓運行aaa()中的轉址後,後面的code都不會運作

就好像ASP的response.end一樣,中斷程序

如果可行的話,我就只用改test.js那隻,其他所有頁面都不用改了

但目前看來JS似乎沒有這類server端的中斷語法
本篇文章回覆於2012-12-27 15:56
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

Solty
檢舉此回應
一般來說,js確實沒有像後端的中斷語法
尤其是alert(),confirm()..這類會暫停js執行的語法
但..那只是一般的情況而言,而你的問題剛好有解
山不轉路轉,把alert直接作掉
本篇文章回覆於2012-12-27 17:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

迷路
捐贈 VP 給 迷路 檢舉此回應
所謂的Server端處理是指ASP或是PHP之類的
JS是客戶端的程式,原本就不適合處理網頁開啟前的判斷問題吧

應要做的話
將script中沒有放在function的指令整合到bbb()中
然後aaa()的判斷中是的話就轉址否的話就執行bbb()
本篇文章回覆於2012-12-27 17:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

香帥
檢舉此回應
不管您要幾個alert,包含上百個也一樣,那只要多加幾個判斷就好,不往後走,或往他路走都是隨您自己需要
意思就是在alert前面多加幾個變數判斷,包括往前往後,連alert內的字都可改
不要執著於用某種方法,達到同樣目地就好
您原來題目是兩個alert
我一樓舉例也是兩個alert是可以停後面的
但您二樓的舉例變成三個alert
我也可以把
<p><script>alert("dddd");</script></p>
這行再加其他變數判斷就可讓它不會執行,當然這沒意義
您可再舉4個或更多alert,只要其中一個沒判斷,還是一樣沒意義
總之在alert前多加一個判斷去處理就能解決問題.


本篇文章回覆於2012-12-27 20:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.