JavaScript推送到数组对象不起作用

时间:2011-08-17 18:37:35

标签: javascript json

我有一个类似下面的HTML

HTML:

 <INPUT TYPE=CHECKBOX NAME="clcik" onClick="add('1234','blah')" />
 <input type="hidden" id="project" value="" />

JS:

    function add(obj1 , obj2){
    var jsonArray = [];
    var jsonObj = { product_id : obj1 , name : obj2 };
    jsonArray.push(jsonObj);
    var field = document.getElementById('project');
    field.setAttribute('value', JSON.stringify(jsonArray));
    alert(field.getAttribute('value'));
    }

我试图先设置并再次检索以检查但没有发生任何事情......我无法理解我错在哪里......?

5 个答案:

答案 0 :(得分:4)

我猜你错过了将stringify结果导入stringData变量,因为在它到达你试图提醒值的行之前你得到一个js错误。

{p> JSONJSON.stringify未提供jQuery如果浏览器本身不支持,则必须在页面上包含json2库。

试试这个

function add(obj1 , obj2){
    var jsonArray = [];
    var jsonObj = { product_id : obj1 , name : obj2 };

    jsonArray.push(jsonObj);
    var stringData = JSON.stringify(jsonArray);

    var field = document.getElementById('project');

    field.setAttribute('value', stringData);
    alert(field.getAttribute('value'));
}

根据您在评论中的请求从数组中删除元素的代码。

var newArray = [], productIdToRemove = "1234";
$.each(jsonArray, function(){
   if(this.product_id != productIdToRemove){
      newArray.push(this);
   }
});

//Now newArray will not have '1234'

答案 1 :(得分:1)

更改

JSON.stringify(jsonArray)
// to
var stringData = JSON.stringify(jsonArray);

小提琴的其他问题,已修复:http://jsfiddle.net/mattball/qWCwa/7/

答案 2 :(得分:0)

在您的示例中,您从未设置stringData

答案 3 :(得分:0)

直接在输入上获取/设置“value”属性,而不是getAttribute和setAttribute方法。

答案 4 :(得分:0)

更改代码以分配stringData后,它似乎对我有用:

function add(obj1 , obj2){
    var jsonArray = [];
    var jsonObj = { product_id : obj1 , name : obj2 };
    jsonArray.push(jsonObj);
    var stringData = JSON.stringify(jsonArray)
    var field = document.getElementById('project');
    field.setAttribute('value', stringData);
    alert(field.getAttribute('value'));
    }

add(1, 2);

您可以在此处看到它:http://jsfiddle.net/jfriend00/HNuak/

仅供参考,如果您只是在可以看到javascript执行错误的环境(例如Chrome或Firefox调试程序)中运行,则可以在错误控制台中轻松查看此类错误。