修改隐藏输入中的json数组?

时间:2013-12-07 12:52:26

标签: javascript jquery html

我有一个隐藏的输入:

<input type="hidden" id="paidIds" name="paidIds" value="[]">

它以一个空数组作为其值开始。 我想添加和删除它的项目,但我不知道如何。
到目前为止,这是我的代码:
附件:

var $paidIds = $('#paidIds').val();
$paidIds.push($id);
$('#paidIds').val($paidIds);

要删除:

var $paidIds = $('#paidIds').val();
var $index = paidIds.indexOf($id);
if($index != -1) {
    $('#paidIds').val().splice($index, 1);
}
$('#paidIds').val($paidIds);

到目前为止,其中一个问题是:$ paidIds仍未定义:

var $paidIds = $('#paidIds').val(); 

亏本,谷歌没有帮助-__-

修改 部分工作,在调试器$ paidIds = [4],但它没有设置值。

var $paidIds = JSON.parse($('#paidIds').val());
$paidIds.push($id);
$paidIds = JSON.stringify($paidIds)
$('#paidIds').val($paidIds);

EDIT2 修复了丢失的#

3 个答案:

答案 0 :(得分:1)

您需要将字符串转换为对象。

变化:

$('paidIds').val()

$('#paidIds').val()

尝试:

var $paidIds = $('#paidIds').val();
if($paidIds != ""){
    $paidIds = JSON.parse($paidIds);
}

答案 1 :(得分:1)

在您从输入中读取时尝试使用JSON.parse,并在设置输入值时使用JSON.stringify

答案 2 :(得分:1)

我建议您将数组存储为data-属性并使用jQuery.data()来读取它,而不是将值解析为数组。

HTML

<input id="paidIds" name="paidIds" data-array="[1,2,3]" value="[1,2,3]">

JS

/* Custom event to handle updates*/    
 $('#paidIds').on('updateArray', function (evt, newVal) {
     var arr = $(this).data('array');
     arr.push(newVal);
     $(this).val(JSON.stringify(arr))
 });

/* Useage*/
 $('button').click(function () {
      var newArrValue=$(this).data('val')
     $('#paidIds').trigger('updateArray', [newArrValue]);
 });

DEMO