2011-02-09 94 views
1

我們已經有了一些這樣的代碼已經工作了一段時間。它用於提交html表單的按鈕,除非附近的文本框爲空。我已經從我們的代碼中直接獲取了這段代碼;我已經更改了字段的內容,但沒有刪除任何內容。JavaScript返回false不停止表單提交

<input 
    type="image" 
    name="inputName"  
    id="inputId" 
    src="someImage" 
    alt="altText" 
    onclick=" 
     javascript:var obj = document.all ? document.all[&quot;aTextInputFormFieldId&quot;] : 
     document.getElementById(&quot;aTextInputFormFieldId&quot;); 
     if(obj.value.length == 0) 
     { 
      alert('It is 0!'); 
      return false; 
     };" 
    style="someStyle" /> 

(原始代碼全部在一行上,但爲了清晰起見,此處添加了換行符)。

它似乎在Firefox中完美工作。但是在IE中,它以我無法理解的方式失敗:如果輸入字段(aTextInputFormFieldId)爲空,它會提示警報,但在用戶單擊警報上的OK按鈕後,仍會提交表單。

當我在整個頁面上做了一個查看源並複製到本地時,它看起來很完美;它要麼提交表單,要麼提出警報,然後拒絕提交。

我最好的當前(但仍然糟糕)的理論是,其中一個包含的JavaScript庫做了一些有趣的事情,這將解釋爲什麼它在真實站點上失敗,但是當我將它複製到本地時失敗(因爲我沒有抓住它所導入的各種庫)。這是合乎邏輯的,我也會通過抓取庫來檢查它,但是我很難想象這些庫可能會如何解決這個問題(或原因)。 ..他們只是正常的實用程序庫,如jQuery,實用功能等。

那麼,有沒有人有關於在這裏會發生什麼的理論?

+0

如果您有多個庫,請嘗試逐個添加它們以確定哪一個與您的表單混淆。 – 2011-02-09 20:38:52

+1

`document.all` ?!你爲什麼選擇IE 4? – Quentin 2011-02-09 20:39:30

+0

@Scott:這是我的想法,現在我在做什麼......但我很難想象爲什麼會有一個圖書館以某種方式攔截這個,允許警報通過,但取消返回錯誤。但也許其他事情正在發生......(顯然我錯過了*某事* ...) – Beska 2011-02-09 20:40:45

回答

3

你提到的jQuery,jQuery的可以與您的形式干預,如果它是通過其submit() handler做任何事情。檢查jQuery.submit()是否綁定到您的表單。

通常在做純JavaScript時,它不足以返回false。根據你要完成你可能想看看preventDefaultstopPropagation

當與Internet Explorer工作的注意,事件對象未傳遞給函數,但可以在window.event找到代替的東西。

更新 Internet Explorer可能希望您使用event.returnValue = false;來代替。在你的情況下,這將是window.event.returnValue = false;針對IE瀏覽器。

祝您好運

0

Javascript協議鏈接必須是一行,即。沒有新的線路。

onclick="javascript:var obj = document.all ? document.all[&quot;aTextInputFormFieldId&quot;] :document.getElementById(&quot;aTextInputFormFieldId&quot;); if(obj.value.length == 0){alert('It is 0!');  return false;};" 
相關問題