0

リストにコンテンツを動的に追加していますが、重複の追加を防止できるようにしたいと考えています。したがって、コンテンツを追加する前に、すべてのリストを選択し、配列を作成して、追加するデータがまだリストに含まれていないことを確認します。ただし、コードで予期しない識別子を取得します。これは私のコードです:

$(".autocomp_centers").autocomplete({
    var ids = new Array();
    $("#sister-centers-list > li").each(function(index, value){
        ids.push($(value).attr('class'));
        console.log($(value).attr('class'));
    });

    serviceUrl:'/suggest_centers',
        maxHeight:400,
        width:252,
        params: {country: $("#country").val() },
        minChars:2,
        onSelect: function(value, data){
            if ($.inArray(data, ids) == -1){
                alert("Sister center has already been added.");
            }else{
                $("#hidden-ids").append('<input type="hidden" name="center_ids[]" value="' + data +'" class="center-' + data + '"/>');
                $('#sister-centers-list').append('<li class="center-' + data + '">' + value + ' <a href="#sister-center" class="remove-center-before-save" id="' + data + '">Remove</a></li>');
            }               
            $("#sister-search").val("");
        }
});

ユーザーが入力を開始してこのメ​​ソッドが呼び出されると、リストの値を取得して配列に格納します。彼らが値を選択するとき、その値がすでに配列にあるかどうかを確認します。これは、エラーの原因となる行です。var ids = new Array();

4

2 に答える 2

1

オートコンプリート コマンド ( http://api.jqueryui.com/autocomplete/ ) には、パラメーターとしてオブジェクトが必要です。オブジェクト プロパティの間に直接コードを記述することはできません。

代わりに次のようにしてみてください。

var ids = new Array();
$("#sister-centers-list > li").each(function(index, value){
    ids.push($(value).attr('class'));
    console.log($(value).attr('class'));
});

$(".autocomp_centers").autocomplete({
    serviceUrl:'/suggest_centers',
    maxHeight:400,
    width:252,
    params: {country: $("#country").val() },
    minChars:2,
    onSelect: function(value, data){
        if ($.inArray(data, ids) == -1){
            alert("Sister center has already been added.");
        }else{
            $("#hidden-ids").append('<input type="hidden" name="center_ids[]" value="' + data +'" class="center-' + data + '"/>');
            $('#sister-centers-list').append('<li class="center-' + data + '">' + value + ' <a href="#sister-center" class="remove-center-before-save" id="' + data + '">Remove</a></li>');
        }               
        $("#sister-search").val("");
    }
});

もちろん、アプリケーションの機能によっては、さらに変更を加える必要がある場合があります。たとえば、同じページに複数の「オートコンプリート」項目がある場合、それぞれに個別の ID 配列を使用したい場合があります。等。

于 2013-01-09T11:48:59.130 に答える
1

関数を開始するつもりだったように見えるときに、オブジェクト リテラルを開始しました。

{
    var ids = new Array();

あなたはおそらく欲しい:

function () {
    var ids = new Array();
于 2013-01-09T10:30:39.290 に答える