Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
合并两个JavaScript函数_Javascript - Fatal编程技术网

合并两个JavaScript函数

合并两个JavaScript函数,javascript,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(' ')+

我正在使用此功能:

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");
    } 
}
function toTitleCase(str)
{
    return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}
我这样称呼它:

<input type="text" name="et_newpost_tags" onkeyup="limitWords(this.id)"
在这里:

因此,我想知道是否可以将第二个函数合并到第一个函数中,这样该函数将大写每个单词的第一个字母(用逗号分隔),而不会影响计算输入字段中逗号数量并发出警报的函数

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();
    });
}​
​
给你

注意:我没有更改您现有的
limitWords
功能,假设它按照您的预期方式工作

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();
    });
}​

基本上James hills会回答,但“toTitleCase”调用的位置正确。

Limit words似乎已经包含一个Toproperce函数,该函数将出现在每个字符串上。哦,对不起,我没有注意到我放置的自定义函数(合并)不起作用。我现在已经更新了原始问题(第一个代码块)。只有当内容超过限制时,才会出现标题大小写。没错,这一个有效,但只有在我输入三个以上的单词时才会触发-在警告框后更改大小写。@James Hill nice更正您的答案,并投票否决我的答案,这真的很经典。即使我相信这基本上是你的答案。非常感谢你,詹姆斯,所有的帮助都很感激。这一个完全按照它应该工作的方式工作,实时更改大小写。还有一件事我刚刚注意到,不确定它是否可以包含在这个线程中。我的警报在三个字后出现,而不是三次昏迷。意思是,如果第一个“单词”由两个单词组成,它将不允许我放置多个真实项目。有什么想法吗?所以,实际上,我希望能够把“一,二,三”放进去,现在,它只允许我用“一,二,三”。你的正则表达式正在寻找空格,如果你没有空格,那么它就不能正确地将单词拆分,也不能将它们大写。您希望接受哪些字符作为单词,哪些字符作为单词的一部分,哪些字符作为单词分隔符?抱歉,没有回答您的问题正则表达式包含“\w\S”表示字母、数字和下划线(\w),后跟否定的空格或任何非空格(\S)的内容。那么,您希望每个单词大写,还是只希望每个标记的第一个,即输入“这是第一个扇区,这是第二个”,应该说“这是第一个扇区,这是第二个”还是“这是第一个扇区,这是第二个”?