1

ユーザーが「つぶやき」を入力できるシンプルなフォームがあります。URLが入力されたときに何が起こるかを制御するために、舞台裏でJavaScriptをいくつか持っています。

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だけ入力しても問題ありません。ただし、テキストを追加するとすぐに、URL が配列内にあるかどうかが無視され、選択オプションが削除されます。これをもっとうまく説明する方法がよくわからないので、私が何を意味するのかを示すためにフィドルをセットアップしました。

誰かが理解し、正しい方向に向けてくれることを願っています

フィドル

4

5 に答える 5

1

これは、入力全体が配列内にあるかどうかを確認しているためです: if ($.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) {

フィドル

于 2013-10-22T13:09:23.113 に答える
0

に問題があります$.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();
        }
    });

});
于 2013-10-22T13:42:33.673 に答える
0

@siledhが言ったこと。現在のテスト配列を使用する方法は次のとおりです

var reg = new RexExp(test.join('|').replace(/\./ig, "\\."), 'ig')
if( reg.test(val) ) {
    $('#tweet_campaign').show();
} else {
    $('#tweet_campaign').hide();
}
于 2013-10-22T13:23:57.970 に答える