2011-08-24 66 views
0

這個問題在一些歷史的代碼纔剛剛變得明顯,似乎是與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

怎麼一回事,因爲這娃這是一個時間緊迫的問題,因爲目前我只是將彈出窗口中的所有文本都放入警報中,並調用該函數而不是函數。當我有更多時間花費調查時,我會更新。

+1

什麼是你真正想幹什麼? –

+0

不確定在這種情況下有效變量的作用。也許你可以用更多的示例代碼來解釋你的問題? –

+0

需要更多的代碼和上下文。 – mVChr

回答

0

您是否在窗體標籤上定義了onsubmit事件?如果是,則在onsubmit事件中添加關鍵字返回,如下所示 onsubmit =「return some_function」,並在函數中調用ü必須指定返回false。然後你會得到你想要的。

希望這可以幫助你。

+0

我有這個 'if(valid){return true;} else {return false;}'在我的函數結束時已經返回一個值,所以我認爲'valid'必須被重置某處? – allanmayberry88

+0

首先在if和else條件中設置一個警報來檢查有效值是真是假 – AmGates

+0

我已經添加了警報來檢查 - 當我碰到我的'showformat()'函數時,'valid'是虛假的。只要執行並且新窗口打開,我不能得到任何進一步的輸出或警報顯示,我的js必須返回到我的html提交表單,因爲它然後提交表格 – allanmayberry88

0

下面是SImple示例,它可以滿足您的需求。試試這個,相應地修正我們的代碼

<html> 
<head> 
    <script type="text/javascript"> 
     function validate() 
     { 
      if(document.forms[0].stext.value!="") 
      { 
       return showformat(); 
      } 
      else 
       return false; 
     } 
     function showformat() 
     { 
      window.open("new.html",""); 
      return false; 
     } 
    </script> 
</head> 
<body > 
    <form name="sample" action="onsel.html" method="post" onsubmit="return validate()"> 
    <input type="text" name="stext" id="stext" value="" /> 
    <input type="submit" value="Submit"/> 
    </form> 
</body> 
</html> 

希望這有助於你

+0

你試過執行這個例子嗎?如果是的話,它會回答你的問題。嘗試執行它..這個例子給我的輸出,因爲你期望,所以它會對你有所幫助 – AmGates

+0

嗨,我感謝你的幫助到現在爲止,但正如我已經解釋,你的例子看起來像我已經到位 - - 問題是,一旦新窗口在我的示例中打開 - 沒有值似乎從該函數返回,我的頁面上應該運行的腳本的其餘部分似乎被忽略 – allanmayberry88

+0

您注意到我如何調用showformat函數?好的,如果可能的話,你可以把你的代碼發給我的郵件ID,我會幫你完成的。 – AmGates