1

私はこのプラグインを使用しています: http://loopj.com/jquery-tokeninput/は、ユーザーが入力を開始し、必要なアイテムを選択し、複数の提案を追加できる提案フィールドを実行します。

このプラグインには onAdd および onDelete コールバックがあります。

私がやりたいのは、onAdd で、非表示の入力の値の中に要素 ID を格納したいということです。複数の項目を追加できるため、入力値は次のようになります: 123,145,875,968

これで結構です。ここで助けが必要なのは、OnDelete イベントです。アイテムを削除したという事実を反映するために、入力値を更新する必要があります。

これがコードです

onAdd: function (item) {
   var value = $("#itemID").val();
   $("#itemID").val(value + item.id + ',');
},
onDelete: function (item) {
   ???? In word: Remove that specific ID from the input value, but keep the other value
}

PS。これらの ID を入力に保存して、後で ajax 呼び出しの値のリストを簡単に取得できるようにします。今、それが最善の方法かどうかはわかりませんが、ええ、それは私が「新しい」プログラマーとして考えたことです:)

前もって感謝します

4

3 に答える 3

1

更新しました

そのプラグインのドキュメントを見る:

selector.tokenInput("get"); tokeninput から選択されたトークンの配列を取得します (各アイテムは kind のオブジェクトです{id: x, name: y})。

このようなことを試してください:

// do this at time of submit()
var tokens = $('#your-plugin-element-id').tokenInput( 'get' );
var output = [];
$.each( tokens, function( i, el ) {
  output.push( el.id );
});
var outputString = output.join( ',' );

そうすれば、別の非表示の入力で追跡する必要がなくなります。

さらにきれいですが、使用すると理解しにくいかもしれませんmap()

var tokens = $('#your-plugin-element-id').tokenInput( 'get' );
var outputString = $.map( tokens, function( el ) { return el.id; } ).join( ',' );

-

これはうまくいくはずです:

var itemList = $('#itemID').val().split(',');
for( var i=0 ; i<itemList.length ; i++ ) {
  if( itemList[i] == item.id ) {
    itemList.splice( i, 1 );
    break;
  }
}
$('#itemID').val( itemList.join( ',' ) );

編集:これは既存のコードの簡単な修正でしたが、他のコメントで述べたように、送信時にシリアル化する方が良いでしょう

于 2012-08-30T20:55:23.577 に答える
1

アイテムが追加または削除されたときに、提案フィールドの全体的な値を保存する必要があるとは思いません。ajax 呼び出しを行う準備ができたら、次を使用して提案フィールドの現在の値を取得します。

selector.tokenInput("get");

これは、「メソッド」セクションで参照した jQuery Tokeninput ページに記載されています。これにより、次のような値の JSON 表現が得られます。

[{id: 0, name: "something"},{id: 1, name: "something else"}]

次に、それをループして、ID を取得し (それだけで十分な場合)、それらを文字列に連結して、AJAX 経由で送信できます。

必要なときにシリアル化します。データに対して追加の作業を行う場合は、シリアル化が必要になるまで、作業を行うのに最も簡単な形式のままにしておいてください。

于 2012-08-30T20:47:41.077 に答える
1

このコードを確認してください

                onDelete: function (item) {
                var idd  = item.id;
                alert (idd);
                var value = $("#itemID").val();  
                var x = value.replace( idd+ ',', "" );
                $("#itemID").val(x);
                }

itemID は非表示の入力です

于 2012-08-30T21:09:46.923 に答える