Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.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 如果数组中存在url,请执行某些操作_Javascript_Jquery - Fatal编程技术网

Javascript 如果数组中存在url,请执行某些操作

Javascript 如果数组中存在url,请执行某些操作,javascript,jquery,Javascript,Jquery,我有一个简单的表单,用户可以输入“tweet”。我在幕后使用了一些javascript来控制输入url时发生的事情 如果输入一个url,如test.com,则会出现一个新的输入字段 如果输入了存储在数组中的url,它将显示新的输入字段以及选择选项 以下是我的javascript: var test = ["test1.com", "test2.com", "test3.com"]; $('#tweet_text_ga').hide(); $('#custom_alias').hide(); $(

我有一个简单的表单,用户可以输入“tweet”。我在幕后使用了一些javascript来控制输入url时发生的事情

如果输入一个url,如test.com,则会出现一个新的输入字段

如果输入了存储在数组中的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,它就可以正常工作。但只要添加更多文本,它就会忽略url是否在数组中,并删除select选项。我不太清楚如何更好地解释这一点,所以我设置了一个小提琴来说明我的意思

我希望有人能理解我,并为我指出正确的方向


这是因为您正在检查整个输入是否在数组中:
如果($.inArray(val,test)!=-1)
。您需要使用正则表达式从输入中检索URL并进行检查

编写一个正则表达式来检索任何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) {

这是因为您正在检查数组中是否有整个输入:
如果($.inArray(val,test)!=-1)
。您需要使用正则表达式从输入中检索URL并进行检查

编写一个正则表达式来检索任何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) {

这是我处理第一个url的版本


这是我处理第一个url的版本


斯莱德说了些什么。下面是如何使用当前的测试阵列

var reg = new RexExp(test.join('|').replace(/\./ig, "\\."), 'ig')
if( reg.test(val) ) {
    $('#tweet_campaign').show();
} else {
    $('#tweet_campaign').hide();
}

斯莱德说了些什么。下面是如何使用当前的测试阵列

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

});

活动字段再次开始消失的原因是您将输入的整个值与数组进行比较。如果您只是找到所有域匹配项,然后将它们与您的阵列进行比较,那么它应该可以工作

像这样:

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)
,您使用的值是整个值。 不确定你的目的,所以写一个这样的代码。希望能有帮助


您的
$有问题。isArray(val,test)
,您使用的值是整个值。 不确定你的目的,所以写一个这样的代码。希望能有帮助


最后要实现的是一个数组,其中所有URL都写在textarea中?请改用val.match并查看匹配数据。最后要实现的是一个数组,其中所有URL都写在textarea中?请改用val.match并查看我使用regex查找的匹配数据,但我不确定是否可以对照域数组进行检查?
regex.test(array[index])
我正在研究使用regex,但不确定是否可以对照域数组进行检查?
regex.test(array[index])