這個問題在一些歷史的代碼纔剛剛變得明顯,似乎是與IE8 +和FF4 +的Javascript回報問題
我有一個驗證的接觸形式的js文件的問題,一個特定部分調用一個函數打開一個包含用戶信息的新窗口。此時腳本似乎忽略我的valid = false
變量(被判停止表單提交)
function showFormat() {
var myWindow;
myWindow = window.open("http://url/page.html","Postcode_Information","location=1,status=1,scrollbars=1,width=640,height=400");
myWindow.moveTo(50,50);
}
上面的代碼是導致該問題。我已經嘗試將valid=false; return valid;
添加到該函數的結尾,但顯然被忽略。將此添加到函數的開頭意味着有效性是正確的,並且表單不提交,但顯然我的新窗口沒有打開。
編輯來更加詳細地解釋
我的js文件有一系列的驗證功能(檢查用戶名,地址,電子郵件地址有效性等)。一個名爲valid
的變量被初始化,它將始終爲真,除非有任何用戶輸入未驗證,在這種情況下valid = false
。
如果valid = false
則運行一個if語句,該語句檢查多個變量,以確定驗證的哪個區域導致了問題並將標記出適當的提示。其中大部分是通過消息框完成的(我繼承了這個代碼,只是試圖讓它工作),但是一個提示會打開一個新窗口。如果有任何這些提示被調用,則不應提交表單。
我遇到的問題是,當這個新的窗口打開(這是唯一的提示導致此問題)表單仍然會提交。
下面見代碼時,這些提示被稱爲的例子:
if (!valid) {
if (emailNoAddress == true) {
alert('You have requested to receive more information by email from other company(ies) but have not provided email address details – Please correct this below');
highlightEmail();
}
else {
if (contactDetails == false) {
alert('Please provide your email address details. We will not send you future correspondence and offers by email if you prefer us not to.');
highlightAddress();
highlightEmail();
}
else {
if (postcodeGiven == false) {
if (dataform.pcode.value == "") {
alert('Please enter a valid postcode');
}
else {
showFormat();
}
}
else {
if (questionsAnswered == false || countryGiven == false) {
alert('Please choose an answer from the options provided');
}
else {
//alert(checkstr);
alert('Could you please complete the questions missing details');
}
}
}
}
}
所以你看,我的功能,只能調用時!valid
在這種情況下,形式不應該提交,但只要我執行新窗口功能showformat()
它允許表單被提交。
編輯 - UPDATE
我已經設法略爲縮小的問題倒在打開的新窗口後,執行沒有更多的腳本(我已經嘗試添加一些警報消息來檢查值的valid
但他們不顯示 - 我也嘗試添加一個斷點,而使用Firebug調試但這未命中)且不論形式提交...
編輯 - UPDATE
怎麼一回事,因爲這娃這是一個時間緊迫的問題,因爲目前我只是將彈出窗口中的所有文本都放入警報中,並調用該函數而不是函數。當我有更多時間花費調查時,我會更新。
什麼是你真正想幹什麼? –
不確定在這種情況下有效變量的作用。也許你可以用更多的示例代碼來解釋你的問題? –
需要更多的代碼和上下文。 – mVChr