0

我编写了一个简单的脚本,它通过一个文本区域并传输 !hash 标签!和@person names@ 分成两个单独的输入。

但是,除非满足两个正则表达式条件中的第一个(单词以“!”开头并以“!”符号结尾),否则它不适用于下一个条件。

例如第 42 行的代码 console.log(persons_parsed); 根本不执行,除非 !hash 标签!输入文本区域。

如何使其工作,所以我只能输入 @person name@ 并将其填写在 input#persons_jquery 中?

jsfiddle 中的代码:http: //jsfiddle.net/Yz2jw/1/

有问题的部分

if (tags_parsed.length > 0) {

        var vysledek_tags = null;
        for (i = 0; i < tags_parsed.length; i++) {
            if (vysledek_tags) {
                var vysledek_tags = vysledek_tags + ', ' + tags_parsed[i].replace(/[!]/g, '');
            } else {
                var vysledek_tags = tags_parsed[i].replace(/[!]/g, '');
            }
        }
        $('#tags_jquery').val(vysledek_tags);

    }
    console.log(persons_parsed); // THIS DOESNT RETURN ANY VALUE!!!

    if (persons_parsed.length > 0) {

        var vysledek = null;
        for (i = 0; i < persons_parsed.length; i++) {
            if (vysledek) {
                var vysledek = vysledek + ', ' + persons_parsed[i].replace(/[@]/g, '');
            } else {
                var vysledek = persons_parsed[i].replace(/[@]/g, '');
            }
        }
        $('#persons_jquery').val(vysledek);

谢谢你,雅库布

4

2 回答 2

0

读取控制台输出。它告诉你问题:

Uncaught TypeError: Cannot read property 'length' of null

代替

if (tags_parsed.length > 0) {

if (tags_parsed && tags_parsed.length > 0) {
于 2013-05-14T11:49:08.503 回答
0

可以对此代码进行大量清理。

您神秘的“仅在添加第二个时才有效”的原因!是您仅在 keyup 上运行代码,而不是在页面加载时运行。在开始时也运行它可以解决这个问题。

您还可以在每个 keyup 事件中添加到 String 原型!这绝对是个坏主意。对于您的简单情况,可能根本没有理由添加到 String 原型,除非您要在很多地方重用它。

您也不会缓存 jQuery 选择器,在每个 keyup 事件上再次运行它们。最后,您对输出的处理比它需要的要复杂得多。您可能想查找Array.prototype.join

解决这些问题的小提琴分支位于http://jsfiddle.net/CrossEye/6sR9B/

这是相关代码:

$(document).ready(function () {
    var personPattern = /[@]+[\u00BF-\u1FFF\u2C00-\uD7FF\w| ]+[@]/g,
        tagPattern = /[\!]+[\u00BF-\u1FFF\u2C00-\uD7FF\w| ]+[\!]/g,
        $person = $('#persons_jquery'),
        $tag = $('#tags_jquery');
    var processForm = function () {
        var text = $('textarea.new-memory').val(),
            tags_parsed = text.match(tagPattern),
            persons_parsed = text.match(personPattern);
        $tag.val((tags_parsed || []).join(', ').replace(/[!]/g, ''));
        $person.val((persons_parsed || []).join(', ').replace(/[@]/g, ''));
    };
    $('textarea.new-memory').keyup(processForm);
    processForm();
});
于 2013-05-14T12:18:00.517 回答