2012-06-09 76 views
0

我正在寫一個計劃在Opera瀏覽器中使用的(本地主機)網站(因爲我的網站使用的是HTML5)。在網站的一部分,我有一個表格,其中一個字段是一個數字。我試圖使用jQuery Validate插件來驗證條目是一個數字,但它不是必需的。jQuery驗證在Opera中不需要的驗證號

我希望這是解決方案,並在Chrome中工作,但在Opera,驗證被忽略

<form id="productForm"> 
<input type="text" name="MinPrice" id="Minprice" /> 
<input type="submit" value="OK" /> 
</form>​ 

$("#productForm").validate({ 
    rules: { 
     MinPrice: { 
      number: true 
     } 
    } 
});​ 

爲了讓jQuery來驗證在Opera中的一些,看來我必須寫:

<form id="productForm"> 
<input type="text" name="MinPrice" id="Minprice" /> 
<input type="submit" value="OK" /> 
</form>​ 

$("#productForm").validate({ 
    rules: { 
     MinPrice: { 
      number: true, 
      required: true 
     } 
    } 
});​ 

但問題是,我不希望要求MinPrice,我想如果我輸入任何內容到現場,只確認它

謝謝

CampSoup1988

+0

請將我的答案標記爲「已接受」並帶有綠色複選標記,以便有此問題的其他人可以輕鬆找到解決方案。謝謝:) – hallvors

+0

我想type =「number」混淆了jQuery插件,並使其無法運行驗證(除非輸入也是必需的)?你能寫一個小的演示,例如在jsfiddle.net上? – hallvors

+0

[input type = number(does not work)](http://jsfiddle.net/xDsRD/)[input type = text(works)](http://jsfiddle.net/GCsTq/) – CampSoup1988

回答

0

這看起來像插件(或在Opera取決於您的觀點)的錯誤。

您可能能夠解決其與「依賴回調」的方法如下:

$("#productForm").validate({ 
    rules: { 
     MinPrice: { 
      required: function(el) { 
       var $el = $(el); 
       if(!$el.val()) { $el.val('0') }; 
       return false; 
      }, 
      number: true 
     } 
    } 
});​ 

如果我這樣做是正確,那麼這應該強制場永遠是空的通過插入'0'。

提供插件在其驗證號碼之前執行其「必需」驗證,此解決方案有可能工作。

如果它不起作用,那麼您可以通過綁定到該字段的「blur」處理程序實現相同的效果。

如果您需要區分用戶輸入的'0'和強制的「fudge-value」,那麼您可以強制'-1'而不是'0'並相應地測試服務器端。

+0

我改了一行if(!$ el.val()){$ el.val('')};因爲我希望默認值爲null而不是零,並且只要輸入類型是文本,我就會發現我在我的問題中意外地寫了,但是我使用的是輸入類型編號,但它仍然不適用於輸入型號。 – CampSoup1988

+0

啊,HTML5完全不同。就個人而言,我會堅持使用'type =「text」'並使用'pattern =「regexp」'屬性來約束使用哪些內容,並避免需要使用驗證插件驗證該字段,這明顯表現出不可靠的類型行爲= 「數量」'。 –

0

這裏實際發生的是,在Opera中,input.value(以及Opera提交的內容)是一個空字符串,如果輸入的值不是有效數字。有些令人困惑的是,用戶輸入的內容仍然留在輸入中而沒有被標記爲無效,並且由於.value爲空,JS驗證也沒有看到任何問題。

根據the spec,文本「值清理算法如下:如果元素的值不是有效的浮點數,則將其設置爲空字符串」,但UI-明智的是它仍然令人困惑,所以我認爲Opera應該修復它。

+0

那麼有沒有辦法解決這個問題,仍然使用數字輸入?或者有沒有辦法使文本輸入與數字輸入的界面一起工作? – CampSoup1988

+0

簡短回答:不,因爲這是一個你無法從JavaScript觀察到的問題,你無法用JavaScript來解決它。海事組織這是一個小細節,你可以決定等待Opera的修復,如果你不滿意,那麼「如果輸入是空的,則使默認值爲0(或者包含JS無法觀察到的非數值將被刪除,當我們插入0)「的方法可能是最好的.. – hallvors