1

と の 2 つの入力があるページがusers_listありますusers_ids。jquery.autocomplete は、 をオートコンプリートするために使用されusers_listます。users_ids隠しフィールドです。ユーザーが選択され、users_list彼の ID に追加されると、users_ids. すべて正常に動作します。しかし、問題はuser_ids、ユーザーが から削除された場合に値を削除する方法users_listです。

スクリプト:

$(document).ready(function(){
    function formatItem(row) {
      return row[0] + " (<strong>id: " + row[1] + "</strong>)";
    }
    function formatResult(row) {
      return row[0].replace(/(<.+?>)/gi, '');
    }
    $("#users_list").autocomplete("<%= url_for(:controller => :users,
                                               :action => :autocomplete_users_list) %>",
    {
      multiple: true,
      matchContains: true,
      mustMatch: true,
      autoFill: true,
      formatItem: formatItem,
      formatResult: formatResult
    });

    $("#users_list").result(function(event, data, formatted) {
      var hidden =  $("#users_ids");
        hidden.val( (hidden.val() ? hidden.val() + ";" : hidden.val()) + data[1]);
    });
  });
4

2 に答える 2

0

選択した値の ID を格納する隠しフィールドがあります。

値がなく、ユーザーが値を削除したときにキャッチするには、次を使用します。

$('input.autocomplete').blur(function () {
    if ($.trim($(this).val()) < 1) {
        $(this).siblings('input[type="hidden"]').val(0);
    }
});
$('input.autocomplete').autocomplete(/* autocomplete code */);

ユーザーがオートコンプリート入力ボックスからフォーカスを移動し、hiddenfield を 0 に設定すると、オートコンプリートの動作とは関係なく、blur イベントがキャッチされます。

于 2012-05-03T14:13:22.997 に答える
0

あなたの質問は jquery autocomplete とは何の関係もないようです...シリアル化された配列からアイテムを削除したいと考えています。隠しフィールドの値は次のようになります: id;anotherid;onelastid したがって、コードは次のようになります。

function remove_id_from_hidden(id) {
    var hidden =  $("#users_ids");
    var arr = hidden.val().split(";"); # transforms the string into an array
    arr.splice(arr.indexOf(id), 1); # removes the item from the array
    hidden.val(arr.join(";")); # sets the value again
}
于 2011-04-26T15:16:42.610 に答える