2011-11-30 31 views
0

我有一個JavaScript函數,我試圖調用時確認是真實的。我正在使用document.write,因爲源文檔是.js文件,而不是html。javascript確認操作使用document.write

在真實條件執行之前,我希望用戶確認他們確定要重置計數器。

我有兩次嘗試 - 第一次嘗試返回true,但沒有在真實條件下調用resetCookie()函數。

第二次嘗試是,我認爲,語法錯誤,因爲它似乎什麼都不做。

第一次嘗試:

document.write('<a href="" onclick="return alert(confirm(\'sure?\'));{resetCookie()}{};"><i>Reset counter</i></a>'); 

第2次嘗試:

document.write("<a href='javascript: if (confirm('Continue?')) { alert('You chose true') } else { alert('You chose false.') }; void('')'>Reset counter</a>"); 

感謝您的幫助。

+0

我沒有明白你的意思。你的問題是什麼,你想知道如何最好的方式或任何你的嘗試不起作用。 – 2011-11-30 13:54:37

+1

一旦頁面完成,你就不能在頁面中使用'document.write()';它會隱含地破壞頁面,如果你這樣做。 – Pointy

+0

@Pointy:無論代碼是在'.js'文件還是內嵌'腳本'中。最重要的是'document.write'在* page解析期間完成,而不是在之後完成。 –

回答

3

爲什麼不使用jscript confirm()函數?

if (confirm("sure?") == true){ 
    resetCookie(); 
} 

順便說一句,你的代碼是錯誤的(我會忽略,現在你不能使用文件撰寫已經在運行時):

document.write('<a href="" onclick="if(confirm(\'sure?\')){resetCookie()};return false;"><i>Reset counter</i></a>'); 
+0

這將實現什麼?這個標籤上有一個空的href屬性,所以它不會去任何地方(除了重新加載頁面)... – Leon

+0

Leon,謝謝你。 – jamesTheProgrammer

+0

@Leon:+1解決問題的好工作。注意:僅僅因爲代碼位於'.js'文件中,這並不意味着它在初始頁面加載後發生。你可以在外部使用'document.write'。js'文件,就像你可以使用內聯腳本一樣,只要你馬上做。 –

1

你要注意你的報價風格 - 如果你打開一個sinle報價'你不能沒有逃脫再次使用它,試試這個:

document.write("<a href='javascript:(confirm(\"continue?\") ? alert(\"true\") : alert(\"false\"))'>Reset counter</a>"); 
1

假設你包括這個JavaScript文件內聯,並假設該代碼立即運行(例如,它不是我ñ頁面加載後觸發的函數調用),你可以使用document.write就好了,儘管一般情況下我會避免它。

我也想避免在DOM0(onclick-style)處理程序中放置任何類型的邏輯;相反,調用一個函數:

document.write('<a href="" onclick="return confirmLink();"><i>Reset counter</i></a>'); 
function confirmLinkClick() { 
    if (confirm("sure?")) { 
     resetCookie(); 
    } 
    return false; 
} 

理想的情況下,完全避免DOM0處理程序和使用掛鉤點擊的現代方法,因爲與現代的方法,您可以避免創建全局函數。這意味着使用addEventListener(在現代瀏覽器上)或attachEvent(在IE8及更早版本上),或者更好地使用良好的庫來避免擔心這些差異。

+0

TJ,我喜歡你的想法。我需要多讀幾遍,才能真正理解你的建議。謝謝 – jamesTheProgrammer