2014-01-13 13 views
1
jQuery (function ($) { 

var textarea = $('.project'); 
var $counter = $('.chars'); 

var limit = 200; 
var initial = 0; 

$(textarea).on('keypress keyup copy paste', function(){ 
    displayLength(); 
}); 


function displayLength() { 
    var thisChars = textarea.val().replace(/(\r\n|\n|\r)/g, '').length; 
    if (thisChars > limit) { 
     $counter.text(thisChars + ' of 200 chars'); 
     var CharsToDel = (thisChars-totalChars); 
     textarea.value = textarea.value.substring(0,textarea.value.length-CharsToDel); 

    } else { 
     $counter.text(initial + thisChars + ' of 200 chars'); 

    } 
} 

displayLength(); 

}); 

這種情況是當我在創建頁面上時,它將顯示200個字符的0。然後在文本框中輸入時,它會顯示增加的字符。它也不會計入新的行或空格。因此,當保存創建的頁面時,它仍然會在新頁面上顯示字符數量,即編輯。問題是,控制檯顯示錯誤'不能調用方法'取代'未定義。不能在函數內部使用替換方法

幫助表示讚賞!

+0

使用'textarea.val()的''而不是textarea.value' –

+1

@BrianGlaz IYTM'.VAL()' – Alnitak

+0

@crush S /好/有效/ .. – Alnitak

回答

0

$('anything that is not on the page').val()undefined,它沒有replace方法。爲了簡單地繞過這個錯誤的DOM加載完成您的.project文本區域之前,請考慮使用$(document).ready,或交換undefined''對於這種特殊情況:

var thisChars = (textarea.val() || '').replace(/(\r\n|\n|\r)/g, '').length; // laziest solution 

更合適的解決方案應該檢查textarea的是提供給函數:

function displayLength() { 
    if (textarea.val() === undefined) { 
     return; // do not run any further. 
    } 
    var thisChars = textarea.val().replace(/(\r\n|\n|\r)/g, '').length; 
    if (thisChars > limit) { 
     $counter.text(thisChars + ' of 200 chars'); 
     var CharsToDel = (thisChars-totalChars); 
     textarea.value = textarea.value.substring(0,textarea.value.length-CharsToDel); 

    } else { 
     $counter.text(initial + thisChars + ' of 200 chars'); 

    } 
} 
+0

OP _has_ $(document).ready()'函數 - 這就是'jQuery(function($){...})'所做的。這個答案似乎是糾正症狀,而不是治癒真正的問題(我必須承認這似乎不清楚)。 – Alnitak

0

爲什麼使用JS來限制它在HTML規範中的長度?

<textarea class="project" maxlength="200"></textarea> 

如果您選擇保留的JS限制功能,你需要改變它的東西大致如下:

$(textarea).on('keypress keyup copy paste', function(e){ 
    displayLength(e); 
}); 


function displayLength(e) { 
    var thisChars = textarea.val().replace(/(\r\n|\n|\r)/g, '').length; 

    if (thisChars === limit) 
     e.preventDefault(); 
} 

不知道如何e.preventDefault可與複製/粘貼事件。

+0

哦。 html規格。它看起來很簡單。生病試試看看。 – kittymeows

相關問題