2016-05-24 77 views
0

我想重寫jQuery驗證程序中的突出顯示和unhighlight函數,以執行通常的操作,並向父元素添加不同的類。忽略jQuery驗證突出顯示/ unhighlight方法

基本上我想這樣的:(當我需要幫助的希望基地。部分)

jQuery.validator.setDefaults({ 
     highlight: function(element, errorClass, validClass) { 
      base.highlight(element, errorClass, validClass); 
      element.parents('div.form-group').addClass('has-error'); 
      }, 
     unhighlight: function(element, errorClass, validClass) { 
      base.unhighlight(element, errorClass, validClass); 
      element.parents('div.form-group').removeClass('has-error'); 
      }, 
    }); 

This question在問同樣的事情但是這個問題的答案是行不通的。原來的函數沒有被傳入。也許代碼已經被改變了?

+0

然後開始賞金,而不是重新問你的問題。另外,如果可能,請提供小提琴。 – dude

回答

1
highlight: function(element, errorClass, validClass) { // line 1 
    base.highlight(element, errorClass, validClass); // go to line 1 
    .... 

您不能調用從highlight()unhighlight()highlight()unhighlight()。爲什麼?因爲任何自定義的回調函數都完全取代了插件的內置函數,所以如果上面提出的邏輯起作用,它將無限循環。

我要重寫jQuery中驗證的亮點和unhighlight功能做什麼,他們通常也可以增加不同類的父元素

簡單的默認功能肉從within the plugin複製到你的和修改它們,如你所願。

jQuery.validator.setDefaults({ 
    highlight: function(element, errorClass, validClass) { 
     // default function 
     if (element.type === "radio") { 
      this.findByName(element.name).addClass(errorClass).removeClass(validClass); 
     } else { 
      $(element).addClass(errorClass).removeClass(validClass); 
     } 
     // custom additions 
     element.parents('div.form-group').addClass('has-error'); 
    }, 
    unhighlight: function(element, errorClass, validClass) { 
     // default function 
     if (element.type === "radio") { 
      this.findByName(element.name).removeClass(errorClass).addClass(validClass); 
     } else { 
      $(element).removeClass(errorClass).addClass(validClass); 
     } 
     // custom additions 
     element.parents('div.form-group').removeClass('has-error'); 
    }, 
}); 

原有功能不被傳入。也許代碼已經被改變了嗎?

我不知道他們在想什麼或者他們的解決方案曾經工作過。當您爲jQuery Validate插件使用自定義回調函數時,它們完全覆蓋了插件中內置的默認函數。 (這是jQuery插件的用戶可配置的選項是如何工作的?他們在騎/更換內置的默認值。)

所以,簡單地從插件原代碼複製到您的自定義的回調函數,並對其進行修改如所須。

+0

謝謝,但是當我升級jQuery有效時,會引入風險嗎?看起來它會更安全地稱自己的功能。但我想這是不可能的。 – Greg

+0

@Greg,'highlight'和'unhighlight'函數簡單地添加/刪除類,所以AFAIK在很多年裏變化很小,可能根本就沒有變化。請參閱更改日誌:https://github.com/jzaefferer/jquery-validation/blob/master/changelog.md – Sparky

+0

@Greg,只要突出顯示一個unhighlight正在做你所需要的事情,那麼沒有理由擔心未來內置功能如何變化。無論如何,您的擔憂對於任何jQuery插件的每個用戶可配置選項都是一樣的...有時選項已被棄用,替換或添加。您可以覆蓋默認設置(通過使用可用選項),或者您不需要。 – Sparky