2011-09-14 9 views
8

में शब्द गणना:jQuery: मैं निम्नलिखित jQuery कार्यक्षमता का उपयोग कर रहा वास्तविक समय में शब्दों की गिनती करने के वास्तविक समय

$("input[type='text']:not(:disabled)").each(function(){ 
      var input = '#' + this.id; 
      word_count(input); 

      $(this).keyup(function(){ 
       word_count(input); 
      }) 

     }); 

var word_count = function(field) { 
     var number = 0; 
     var original_count = parseInt($('#finalcount').val()); 
     var matches = $(field).val().match(/\b/g); 
     if(matches) { 
      number = matches.length/2; 
     } 
     $('#finalcount').val(original_count + number) 
    } 

मुद्दा मैं में चल रहा है कि जब मैं एक इनपुट फ़ील्ड में टाइप करना आरंभ, गिनती रिक्त स्थान और मेरी हटाई कुंजी पर भी दो से तुरंत बढ़ता है। कोई विचार क्यों ऐसा होगा?

मैं इस ट्यूटोरियल पीछा कर रहा था: http://www.electrictoolbox.com/jquery-count-words-textarea-input/

इनपुट: <input class="widest" id="page_browser_title" name="page[browser_title]" size="30" type="text" value="">

प्रदर्शन इनपुट: <input class="widest" disabled="disabled" id="finalcount" name="page[word_count]" size="30" type="text" value="662">

+0

आप इनपुट और प्रदर्शन div के लिए भी अपने html में प्रवेश कर सकते हैं? – willdanceforfun

+1

क्या आपके पास [jsfiddle] (http://jsfiddle.net) है? –

+0

यहां jsfiddle का एक लिंक है ... http://jsfiddle.net/M7Jny/ – dennismonsewicz

उत्तर

14

यह हर कुंजी प्रेस के साथ incrementing है, क्योंकि आप इसके साथ करने के लिए कह रहे हैं:

$('#finalcount').val(original_count + number) 

और अगर आप एक और शब्द जोड़ने के लिए, आपको लगता है कि यह 2 से नहीं जुड़ जाता मिलेगा, लेकिन 3. द्वारा मुमकिन है, आप पृष्ठ पर कई इनपुट हैं, और आप प्रत्येक इनपुट में शब्दों की संख्या प्रदर्शित करने के लिए अंतिम गणना इनपुट का इरादा रखते हैं। या तो एक चर में गणना करें और अपने अंतिम गणना मान प्राप्त करने के लिए चर जोड़ें। या हर बार प्रत्येक इनपुट में शब्दों की गिनती करें।

var wordCounts = {}; 

function word_count (field) { 
    var number = 0; 
    var matches = $(field).val().match(/\b/g); 
    if (matches) { 
     number = matches.length/2; 
    } 
    wordCounts[field] = number; 
    var finalCount = 0; 
    $.each(wordCounts, function(k, v) { 
     finalCount += v; 
    }); 
    $('#finalcount').val(finalCount) 
} 

कार्य डेमो: http://jsfiddle.net/gilly3/YJVPZ/

संपादित करें: वैसे, आप कुछ अतिरेक निकाल कर अपने कोड थोड़ा आसान बनाने के लिए कुछ अवसरों मिल गया है। आप जावास्क्रिप्ट के सभी जगह ले सकता है तो आप इस के साथ पोस्ट:

var wordCounts = {}; 
$("input[type='text']:not(:disabled)").keyup(function() { 
    var matches = this.value.match(/\b/g); 
    wordCounts[this.id] = matches ? matches.length/2 : 0; 
    var finalCount = 0; 
    $.each(wordCounts, function(k, v) { 
     finalCount += v; 
    }); 
    $('#finalcount').val(finalCount) 
}).keyup(); 

http://jsfiddle.net/gilly3/YJVPZ/1/

+0

धन्यवाद बहुत धन्यवाद !!!! – dennismonsewicz

+0

एकमात्र चीज जिस पर मैं उलझन में हूं, वह अनावश्यक कीप बाध्यकारी है .. क्या आप इसे थोड़ा समझा सकते हैं? – dennismonsewicz

+0

'.keyup()' फ़ंक्शन तर्क के साथ उस फ़ंक्शन में कीप ईवेंट को बाध्य करता है। लेकिन, यदि आप फ़ंक्शन तर्क को छोड़ देते हैं, तो '.keyup()' बाध्य फ़ंक्शन को कॉल करते हुए कुंजीपटल ईवेंट ट्रिगर करता है। यह '.trigger (" keyup ") के समतुल्य है। मैंने आपके कोड में मौजूद कार्यक्षमता से मेल खाने के लिए कहा था, जहां ईवेंट शब्दबद्ध होने पर एक ही समय में 'word_count() 'कहा जाता है। – gilly3

4

संपादित

चेक this example


क्यों आप के बजाय मिलान और परिणाम में विभाजित करने की split(" ") का उपयोग नहीं करते? आपके पास अपने सभी शब्दों वाला सरणी होगी, सरणी की लंबाई शब्दों की संख्या होगी।

var matches = $(field).val().split(" "); 

इसके अलावा, आप पुराने परिणाम में हर बार मैचों को क्यों जोड़ रहे हैं?

$('#finalcount').val(original_count + number) 

क्या यह हर बार दो बार शब्दों को जोड़ नहीं रहा है?

+0

आप 'संख्या = match.filter (फ़ंक्शन (शब्द) {वापसी शब्द। लम्बाई> 0}) लंबाई का उपयोग कर सकते हैं;' शब्दों के रूप में एकाधिक रिक्त स्थान गिनने से बचने के लिए। – Dennis

+0

@ जोस - टिप्पणी के लिए धन्यवाद! मैच (\ b \ g) ठीक से मेल खाता है जो मैं ढूंढ रहा हूं, यह किसी कारण से कुंजीपटल पर सही काम नहीं कर रहा है।इसकी गणना प्रत्येक कीप ऑपरेशन – dennismonsewicz

+0

@ डेनिस: अच्छा स्पर्श, उत्तर में जोड़ा गया! –

संबंधित मुद्दे