2014-01-30 253 views
0

我跟着這個例子,http://livevalidation.com/documentation#ValidateCustom,檢查是否兩個字段都被填充。所以如果第一個字段不是空白,第二個字段不能爲空,反之亦然。實時驗證自定義驗證器

任何人都可以找出爲什麼這段代碼不工作?

var txtFirstName = new LiveValidation('txtTaco', {onlyOnSubmit: true }); 
txtFirstName.add( 
    Validate.Custom(1, { against: function(value,args){ 
     if(args.first||args.last){ 
      if(args.first&&args.last){ 
       return true; 
      } else { 
       return false; 
      } 
     } 
    }, 
    args: { 
     first:txtTaco.value, 
     last:lastName.value} 
    }) //end custom 
); // end add 

http://jsfiddle.net/r5X6P/

+0

如果您正在測試這個完全屬於的jsfiddle,我注意到,Chrome的努力包括'livevalidation_standalone.js'時拋出一個錯誤。特別是:'拒絕執行'https://github.com/alechill/livevalidation/blob/master/src/livevalidation_standalone.js'腳本,因爲它的MIME類型('text/html')不可執行,嚴格的MIME類型檢查已啓用。 '。驗證是否在本地服務器上工作? –

回答

0

有你的問題和小提琴幾個問題:

  • 您在腳本中包含部分,它是GitHub的網頁,而不是代碼this link
  • 不能熱鏈接github上,要做到這一點,你需要使用rawgithub.com
  • 這種驗證是在第一個文本框,而不是第二
  • 你逝去的「1」值只工作自定義,這是不被使用
  • 您的代碼不包括<form>,所以onlyOnSubmit永遠不會觸發
  • <input>標籤沒有被關閉
  • 你並不需要if (condition) { return true } else { return false },只是return (condition)
  • 你並不需要通過值作爲指定參數時,只需獲得這些功能裏面,它的清潔和作品一樣好
  • 不要使用晦澀的名字,如txtTaco

與解決工作,我發現了一些問題,livevalidation:

  • 您需要使用一個未公開的參數displayMessageWhenEmpty驗證時,該字段爲空
  • 有隱藏validMessage的錯誤。根據對源代碼的評論,您需要將其設置爲false以隱藏它,但這不起作用。所以我只是把它放到一個空間。

我只做了一個驗證器,用於姓。當你改變名字時,它會調用姓氏驗證器。缺點是,如果您設置無效字段的邊框顏色,則只會改變姓氏。

下面是最終代碼:

var valLastName = new LiveValidation('txtLastName', {validMessage: " "}); 

function validateFunction() { 
    var first = txtFirstName.value; 
    var last = txtLastName.value; 
    if (first || last) // If either are present... 
     return (first && last); // ...both must be present 
    return true; 
} 

valLastName.add(Validate.Custom, { 
    against: validateFunction, 
    failureMessage: "Please enter both first and last name", 
    displayMessageWhenEmpty: true 
}); 

// Force validation of txtLastName 
txtFirstName.onkeyup = function() {txtLastName.onkeyup()}; 

和小提琴:http://jsfiddle.net/P7Cf3/