2012-10-12 32 views
2

經過對此問題的廣泛搜索之後,我一直無法找到我自己的問題,我遇到了一個問題,我正在經歷jQuery驗證插件在哪裏調用字符計數插件, m使用SMS-via-PHP格式。jQuery.validate在它發生火災後殺死字符計數器

如果你進入表單,在前端,並開始在文本區域輸入,計數器工作得很好,當然由於元素中有文本,驗證不會觸發......但爲了測試的目的,如果您嘗試在沒有消息的情況下提交表單,驗證會觸發,並且相對於textarea顯示錯誤消息,並且當您輸入副本時,驗證消息將消失,但字符計數器否更長的作品。

下面是我使用的字符計數器:http://cssglobe.com/jquery-plugin-simplest-twitterlike-dynamic-character-count-for-textareas/

這裏是我有我的劇本佈局方式:

$(function(){ 
    //irrelevant functions have been omitted 

    $("#smsMessage").charCount({ 
     allowed:110,   
     warning:10, 
    }); 
    $('form').validate(); 
}); 

我甚至嘗試重新着火計數器功能,如回調至驗證,但這隻會導致在textarea旁邊放置一個重複的非功能計數器。

$(function(){ 
    //irrelevant functions have been omitted 

    $("#smsMessage").charCount({ 
     allowed:110,   
     warning:10, 
    }); 
    $('form').validate({ 
     invalidHandler: function(form, validator) { 
      var errors = validator.numberOfInvalids(); 
      if (errors) { 
       $("#smsMessage").charCount({ 
        allowed:110,   
        warning:10, 
       }); 
      } 
     } 
    }); 
}); 

誠然,這是一個,而我的第一張個人Webdev的項目 - 這是我的未婚妻和我的婚禮現場,所以我想上課它一點。如果有什麼辦法可以讓計數器和驗證很好地結合在一起,那就太好了。如果沒有,這不完全是世界末日,但它還不夠理想。

+0

優秀的第一個問題,良好的工作! – Ryley

+0

@Ryley謝謝!也感謝您的幫助!在工作示例上超出以上。 –

回答

1

問題是,你的計數器插件是不是很聰明地跟蹤計數器的位置。它通過將它放在文本區域之後來創建計數器。驗證插件與錯誤消息一樣。最簡單的解決方法是告訴驗證插件將它的錯誤放在別的地方。試試這個:

$('form').validate({ 
    errorPlacement: function(error,element){ 
     if (element.attr('id') == 'smsMessage'){ 
      error.insertAfter(element.next()); 
     } else { 
      error.insertAfter(element); 
     }    
    }  
});​ 

我做工作的例子,所以你可以嘗試一下:http://jsfiddle.net/ryleyb/6HKuq/