2012-08-01 61 views
3

我有一個日期選擇器與驗證彈出消息和「!」直到用戶選擇一個日期 - 它會顯示一個「O」代替「!」並且彈出窗口的一部分停留在屏幕上以顯示您已完成此字段。自定義動態驗證jquery datepicker不工作,直到第二個焦點

雖然我遇到的問題是驗證彈出窗口不會保留在屏幕上,直到第二次將焦點對準日期選擇器文本字段。

利用有效的jQuery這是相當多的代碼,所以我真的不希望在這裏包括它所有,但這裏有一個jsfiddle

任何想法,爲什麼它沒有運行第一次,但它是隨後的時間?

回答

3

看起來好像blur()在挑選和驗證日期之前被調用。這是一個簡單的解決方案:在選擇有效日期時淡化「O」,而不是模糊。

Working JSFiddle Demo

+0

實際上模糊正確挑選如果你檢查元素,你會看到該元素填充了「O」字符。如果仔細觀察,當輸入元素具有某個值並且通知的元素innerHtml和css被相應地修改時,該元素始終可見 – Jaguar 2012-08-10 11:35:43

1

問題在於你inputElementBlur(e)函數中。具體來說,你叫

if (!$(e).attr("required") && ($(e).val() == "" 
     || $(e).val() == $(e).attr("defaultValue"))) { 
     alert('sniarf!'); 
     $(blurredElement).next("div.tooltipContainer").find("span.formValid").fadeOut(100); 
    } 

我加入警報在那裏,所以你可以看到代碼的行爲。我發現雖然在驗證邏輯中使用defaultValue屬性,但在設置值時實際上並未更新它。

0

有沒有這樣的事情"defaultValue"屬性。這是一個DOM屬性。固定是取得了o首先採摘後會出現:

http://jsfiddle.net/LeXHE/9/

然後是一些邏輯錯誤有:

if (!$(e).attr("required") && ($(e).val() == "" || $(e).val() === $(e).prop("defaultValue"))) { 
    $(blurredElement).next("div.tooltipContainer").find("span.formValid").fadeOut(100); 
} 

其中我變爲:

if (!$(e).attr("required") && $(e).val() == "") { 
    $(blurredElement).next("div.tooltipContainer").find("span.formValid").fadeOut(100); 
} 
+0

這是一個自定義屬性,它通過JS填充。 – Jaguar 2012-08-13 10:31:47

+0

屬性名稱不區分大小寫,所以''defaultValue''對於一個屬性名稱(它被視爲defaultvalue「',因此至少''defaultValue''是多餘的和誤導性的)將是極其糟糕的選擇。這也是dom屬性的大小寫敏感匹配,所以我認爲這是一個錯誤,直到OP說不是。 – Esailija 2012-08-13 10:41:48

+0

當然,但只是採摘有問題的代碼是一個不好的答案imho :)。此外,OP還詢問問題出在哪裏。 – Jaguar 2012-08-13 12:18:09