2012-05-31 109 views
0

我有一個簡單的HTML頁面,其上有一個隱藏字段。我顯示一個DIV,其中有一個按鈕供用戶點擊 - 當他們這樣做時,我想更新主頁上的隱藏字段。從div訪問父級html頁面

目前,我有這個在我的主HTML(在CGI文件):

print "<td><input type=\"hidden\" id=\"mailUpdate\"></td></tr>"; 

我有這個(在div通過的onClick一個按鈕訪問一個JavaScript模塊):

var updMail = document.getElementById("mailUpdate"); 
updMail.value = 1; 

但是當我試圖用這個閱讀(以上述相同的CGI文件):

formData = cgi.FieldStorage() 
doUpd = formData.getvalue("mailUpdate") 
if (doUpd == 1): 
    print "Maint button - doing update" 

'doUpd' 從未獲得任何價值。

希望這是有道理的 - 任何想法?

+0

它不應該的問題,而是關閉輸入標籤。您可以在設置其值之前測試updMail爲null嗎?你的代碼看起來是正確的,但也許有些不妥。用於Firefox或Chrome開發人員工具的Firebug插件對於調試此類情況非常有用! –

+0

嘗試關閉輸入標籤 - 沒有區別(但很好指出 - 總是忘記標籤,謝謝)。 – Nelmo

回答

1

您在表達式中發出謊言(doUpd == 1):您正在將doUpd(字符串)與整數1進行比較。這總是False。更改爲(doUpd == '1'):應該可以解決您的問題。

此外,您需要將name添加到輸入中,以便它會遇到該表單。

print "<input type=\"hidden\" id=\"mailUpdate\" name=\"mailUpdate\"></td></tr>" 
+0

好吧,這樣好一點,因爲我現在可以打印出'doUpd',但仍然沒有獲得價值(=無)。嘗試將其分配給「1」,但仍然沒有喜悅... – Nelmo

+0

我更新了我的答案,在輸入標籤中包含'name'。這應該修復值=無。 –

+0

你是男人 - 輝煌 - 很多謝謝...現在工作很好... – Nelmo

0

不知道CGI很好,它看起來像你在服務器端代碼與客戶端事件混合。隱藏的價值的更好的檢查將添加一行類似如下:

var updMail = document.getElementById("mailUpdate"); 
updMail.value = 1; 
alert(document.getElementById("mailUpdate").value); 

如果您沒有收到在服務器端的價值,很可能是因爲您的輸入字段是不是一個<form>元素中包含然後http消息需要是表單提交,而不是簡單的導航調用。

或者試試這個驗證值是實際存在什麼:

formData = cgi.FieldStorage() 
doUpd = formData.getvalue("mailUpdate") 
print doUpd 
+0

好主意與'警報' - 做到了這一點,並且該字段正在更新正確,但這是在客戶端的JavaScript內。當我回到服務器端時,它似乎已經丟失了(我已經嘗試了'print'並且什麼也沒有顯示 - 當我嘗試concat到一個字符串時,它說無法將字符串連接到noneType)。 – Nelmo

+0

這是您提出的一個很好的觀點,即輸入字段不包含在

內。但是,由於JavaScript驗證了這一點,所以一定還有其他的東西。也許你在的action屬性上使用GET而不是POST?默認是GET,所以確保你指定POST。由於它是一個隱藏字段,因此可能不會使用form-GET。 –