1

ユーザーが投稿のタグを作成できるように、 tag-itを使用しています。

現在は何でも入力できますが、禁止されている単語のリストを JSON の形式で持っています。これを tagit プラグインに実装するにはどうすればよいでしょうか。ユーザーが入力した単語が禁止された単語の 1 つと一致すると、エラーがスローされます。

ui.tag が swearWords.json に存在するかどうかを確認するにはどうすればよいですか?

これが私の現在のコードです:

$('#methodTags_text').tagit({
    availableTags: sampleTags,
    tagLimit:3,
    maximumInputLength: 10,
    fieldName: "item[tags][]",
    beforeTagAdded: function(event, ui) {
       // if ui.tag exists in swearWords.json
       // Then output error
       $('#banned_error').html('You can use this word.')
    }
});          

誓いの言葉.json

["word1","word2","word3","word4","word5"]

François Wahl answer を使用して、なんとか解決策を得ることができました...

$('#methodTags_text').tagit({
    availableTags: sampleTags,
    tagLimit:3,
    maximumInputLength: 10,
    removeConfirmation: true,
    fieldName: "item[tags][]",
    beforeTagAdded: function(event, ui) {
           if (!ui.duringInitialization) {
                var word = eventTags_text.tagit('tagLabel', ui.tag);
                if($.inArray(word , words) > -1){
                    $('#banned_error').html('You cant use this word.');
                    $("#methodTags_url").tagit("removeTagByLabel", word);
                } else {$('#banned_error').html('');}   
           }
    }
});

また、varで外部jsonを取得する

var words = (function () {
    var words = null;
    $.ajax({
        'async': false,
        'global': false,
        'url': "swearWords.json",
        'dataType': "json",
        'success': function (data) {
            words = data;
        }
    });
    return words;
})(); 
4

5 に答える 5

2

単語が配列内にある場合、jQuery inArray()を使用してこれを行うことができます。

var words = ["word1","word2","word3","word4","word5"]

beforeTagAdded: function(event, ui) {
    // if ui.tag exists in swearWords.json
    // Then output error
    var word = "word4"; // I'm assuming you get the word from some control though.
    if($.inArray(word , words) > -1){
       $('#banned_error').html('You can use this word.')
    }
}

デモ- 入力された単語が配列内にあることを確認する


デモからのコード:

<input id="word" type="text"></input>
<button id="checkWord" type="button">Check Word</button>
var words = ["word1","word2","word3","word4","word5"]

$("#checkWord").on("click", function(){
    var word = $("#word").val();

    if($.inArray(word, words) > -1){
       alert("You cannot use this word");
    }
});
于 2013-01-24T10:20:46.393 に答える
0

禁止されている単語の定義には、配列ではなくオブジェクトを使用する方が適切で高速です。

{'word1': 1, 'word2': 1, 'word3':1}

次に、in演算子を使用して検出できます。配列を使用する場合、あなた(またはjQuery)はループ内の配列を調べてアイテムの存在を確認します。これArray.indexOfは、たとえばIE8では実装されていないことに注意してください。

于 2013-01-24T10:31:43.560 に答える
0

これを試して

swearWords.each(function(i,val){
   if(ui.tag == val){
      $('#banned_error').html("You can't use this word.")
  }else{
     //do your stuff
  }
}
于 2013-01-24T10:18:45.440 に答える
0

次のようなものを使用できると思います。

beforeTagAdded: function(event, ui) {
  if (!this._swearWords) {
    // send synchonous XHR to load banned words.
    var xhr = null;
    if (window.XMLHttpRequest) {
        xhr = new window.XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        xhr = new window.ActiveXObject('Microsoft.XMLHTTP');
    }

    if (!xhr) {
        return;
    }

    xhr.open('GET', 'swearWords.json', false);
    xhr.send(null);
    this._swearWords = JSON.parse(xhr.responseText);
  }

  if (tag in this._swearWords) { // I don't know how to get tag...
    // if ui.tag exists in swearWords.json
    // Then output error
    $('#banned_error').html('You can use this word.')
  }
}
于 2013-01-24T10:22:44.360 に答える