我写了一个简单的脚本,它通过textarea和transports!hash标签!和@person names @分成两个独立的输入。
但是,除非满足两个正则表达式条件中的第一个(单词以'!'开头并以'!'符号结尾),否则它不适用于下一个条件。
例如第42行console.log(persons_parsed)上的代码;根本不执行,除非!hash标签!输入textarea。
如何使它工作,所以我只能输入@person name @并将它填入输入#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);
谢谢你, 的Jakub
答案 0 :(得分:0)
读取控制台输出。它告诉你问题:
Uncaught TypeError: Cannot read property 'length' of null
替换
if (tags_parsed.length > 0) {
与
if (tags_parsed && tags_parsed.length > 0) {
答案 1 :(得分: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();
});