2012-08-09 110 views
0

我使用這個功能:合併兩個JavaScript函數

function limitWords(id) { 
var maxWords=3; 
    var d=document.getElementById(id); 
    if (d.value.split(' ').length > maxWords) { 
     t=d.value.substring(0,d.value.lastIndexOf(' ')); 
     d.value=t.substring(0,t.lastIndexOf(' ')+1); 
     alert("You can choose up to 3 sectors"); 
    } 
} 

我稱之爲是這樣的:

<input type="text" name="et_newpost_tags" onkeyup="limitWords(this.id)" 

我也想補充,將每個單詞首字母大寫格式的功能。我發現這個功能:

function toTitleCase(str) 
{ 
    return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); 
} 

這裏:Convert string to title case with JavaScript

所以,我在想,如果有可能的第二功能合併到第一個這樣的功能會爲每個字的第一個字母(分立逗號),而不會影響對輸入字段中的逗號數進行計數並放置警報的功能。

+0

限制詞似乎已經包含一個toProperCase函數,它將在每個字符串上。 – 2012-08-09 09:50:51

+0

哦,我很抱歉,我沒有注意到我把我的自定義函數(合併),哪些不起作用。我已經更新了原來的問題(第一個代碼塊)。 – 2012-08-09 12:08:34

回答

0
function limitWords(id) { 
var maxWords = 3; 
var d = document.getElementById(id); 
if (d.value.split(' ').length > maxWords) { // Swap ' ' for ',' if you want comma's 
    t = d.value.substring(0, d.value.lastIndexOf(' ')); 
    d.value = t.substring(0, t.lastIndexOf(' ') + 1); 

    alert("You can choose up to 3 sectors"); 
} 
// Ensure title case 
d.value = toTitleCase(d.value); 
} 

function toTitleCase(str) { 
    return str.replace(/\w\S*/g, function(txt) { 
     return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); 
    }); 
}​ 

基本上詹姆斯丘陵答案,但與「toTitleCase」電話在正確的地方。

+0

這個工作正如它應該工作一樣,實時改變大小寫。 – 2012-08-09 13:46:06

+0

向下投票關心評論爲什麼? – 2012-08-09 13:49:29

+0

還有一件事我剛剛注意到,不確定它是否可以包含在這個線程中。我的警報在三個字後出現,而不是三個昏迷。意思是,如果第一個「單詞」由兩個單詞組成,它將不允許我放置多於一個的真實物品。任何想法?所以,實際上,我希望能夠提出「一,二,三」,目前只允許我「一二三」。 – 2012-08-09 13:49:37

1
function limitWords(id) { 
    var maxWords = 3; 
    var d = document.getElementById(id); 
    if (d.value.split(' ').length > maxWords) { 
     t = d.value.substring(0, d.value.lastIndexOf(' ')); 
     d.value = t.substring(0, t.lastIndexOf(' ') + 1); 

     alert("You can choose up to 3 sectors"); 
    } 

    // Ensure title case 
    d.value = toTitleCase(d.value); 
} 

function toTitleCase(str) { 
    return str.replace(/\w\S*/g, function(txt) { 
     return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); 
    }); 
}​ 
​ 

這是的a working fiddle

注意:我沒有更改現有limitWords函數的功能,假設它按照您的預期工作。

+0

這隻會在內容超出限制時出現標題情況。 – 2012-08-09 13:01:36

+0

確切地說,這個工作,但它只會觸發,如果我把三個以上的單詞 - 改變警報框後的大寫。 – 2012-08-09 13:45:02

+0

@詹姆斯希爾很好糾正你的答案,並降低我的答案,這真的很優雅。即使我相信它基本上是你的答案。 – 2012-08-09 14:11:55