如果数组中存在 URL,请执行某些操作
if url exists in array do something
我有一个简单的表单,用户可以输入"推文"。我在幕后有一些javascript来控制输入url时会发生什么。
如果输入了诸如 test.com 之类的URL,则会出现一个新的输入字段。
如果输入存储在数组中的 url,它将和新的输入字段以及选择选项。
这是我的JavaScript:
var test = ["test1.com", "test2.com", "test3.com"];
$('#tweet_text_ga').hide();
$('#custom_alias').hide();
$('#tweet_campaign').hide();
$('#tweet_text').keydown(function () {
var val = this.value;
if (/'.[a-zA-Z]{2,3}/ig.test(val)) {
$('#custom_alias').show();
} else {
$('#custom_alias').hide();
}
if ($.inArray(val, test) !== -1) {
$('#tweet_campaign').show();
} else {
$('#tweet_campaign').hide();
}
});
如果只输入一个网址,它就可以正常工作。但是一旦您添加更多文本,它就会忽略 url 是否在数组中,并删除选择选项。我不太确定如何更好地解释这一点,所以我设置了一个小提琴来表达我的意思。
我希望有人理解并能为我指明正确的方向
小提琴
这是因为您正在检查整个输入是否在数组中:if ($.inArray(val, test) !== -1)
.您需要使用正则表达式从输入中检索 URL 并检查。
编写一个正则表达式来检索任何 URL,获取该 URL 并检查它是否是您的幸运之一:
var urlsInInput = /[a-z0-9]+'.[a-zA-Z]{2,3}/ig.exec(val);
if (urlsInInput.length == 1 && $.inArray(urlsInInput[0], test) !== -1) {
而不是
if ($.inArray(val, test) !== -1) {
小提琴
这是我
处理第一个网址的版本
现场演示
$('#tweet_text').keydown(function () {
var val = this.value;
var urls = val.match(/[a-z0-9]+'.[a-zA-Z]{2,}/ig);
var alias = (urls && urls.length>0)
$('#custom_alias').toggle(alias);
var tweet = urls && urls.length>0 && $.inArray(urls[0], test) !== -1;
$('#tweet_campaign').toggle(tweet);
});
@siledh说了什么。以下是使用当前测试阵列的方法
var reg = new RexExp(test.join('|').replace(/'./ig, "''."), 'ig')
if( reg.test(val) ) {
$('#tweet_campaign').show();
} else {
$('#tweet_campaign').hide();
}
广告系列字段再次开始消失的原因是您将输入的整个值与数组进行比较。如果您只是找到所有域匹配项,然后将它们与您的数组进行比较,它应该可以工作。
这样:
var test = ["test1.com", "test2.com", "test3.com"];
$('#tweet_text_ga').hide();
$('#custom_alias').hide();
$('#tweet_campaign').hide();
$('#tweet_text').keyup(function () {
var alias = false;
var campaign = false;
var domain = /([a-z0-9]+(:?['-'.]{1}[a-z0-9]+)*'.[a-z]{2,6})/ig;
var val = this.value;
var match = val.match(domain);
if (match) {
alias = true;
match.forEach(function(e) {
campaign = campaign || ($.inArray(e, test) !== -1);
});
}
if (alias === true) {
$('#custom_alias').show();
} else {
$('#custom_alias').hide();
}
if (campaign === true) {
$('#tweet_campaign').show();
} else {
$('#tweet_campaign').hide();
}
});
你的$.isArray(val, test)
有问题,你使用的值是整个值。并且不确定您的目的,因此请编写这样的代码。希望会有所帮助。
http://jsfiddle.net/sheldon_w/KLuK8/
var test = ["test1.com", "test2.com", "test3.com"];
var urlReg = /[^'s]+'.[a-zA-Z]{2,3}/ig;
$('#tweet_text_ga').hide();
$('#custom_alias').hide();
$('#tweet_campaign').hide();
$('#tweet_text').keydown(function () {
var val = this.value;
var matchedUrls = [];
val.replace(urlReg, function (matched) {
matchedUrls.push(matched);
});
if (matchedUrls.length > 0) {
$('#custom_alias').show();
} else {
$('#custom_alias').hide();
}
$(matchedUrls).each(function (idx, url) {
if ($.inArray(url, test) !== -1) {
$('#tweet_campaign').show();
return false;
} else {
$('#tweet_campaign').hide();
}
});
});
相关文章:
- 单击元素两次后执行操作
- 如何在mvc3中执行操作而不更改当前页面
- jQuery onunload在按下按钮时执行操作
- 如果DOM发生更改,您将如何执行操作
- 在执行所有回调函数后执行操作
- JavaScript 对输入框执行操作
- 如何根据各种复选框状态执行操作
- 对页面重新加载 Jquery 执行操作
- jQuery如果大于则执行操作,但只执行一次
- ngStorage是否异步执行操作
- 如何逐一执行操作
- 只有当输入文本是example.com这样的域时才执行操作
- Javascript数学不起作用,更好的方式来执行操作
- Qubit在控制台中执行操作
- 停止setInterval,直到未执行操作
- 我如何使用javascript对音频标记执行操作
- JS 函数将对象作为输入,并返回一个对象,该对象对作为参数传递的对象执行操作
- 单击时执行操作多个具有相同类的 href
- 在 JavaScript 中传递指定秒数后如何执行操作
- 如何在对用户控件执行操作后调用 Web 服务