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

我认为您不需要在添加或删除项目时存储建议字段的整体值。每当您准备好进行 ajax 调用时,请使用以下命令获取建议字段的当前值:

selector.tokenInput("get");

这记录在您在“方法”部分中引用的 jQuery Tokeninput 页面上。这将为您提供值的 JSON 表示形式,如下所示:

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

然后你可以遍历它,获取 ids(如果你想要的话),然后将它们连接成一个字符串并通过 AJAX 提交它们。

必要时进行序列化。如果您要对数据进行额外的工作,请将其保持在最容易完成工作的格式中,直到您需要对其进行序列化。

于 2012-08-30T20:47:41.077 回答
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

检查此代码

                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 回答