humdinger
humdinger

Reputation: 531

jQuery: Array in object literal for ajax data

I have a form with inputs using an array for the name like this:

<input type="text" name="answer[0]" />

Those work fine when I do an ajax post and serialize the form for the data. Now I am trying to pass a dynamic object to jQuery ajax data that will mimic the structure it gets if it were to serialize the form. Here is the code I'm trying for that:

function sliderCalc(){
        var step = jQuery('[name="step"]').val();
        var max = jQuery('[name="max"]').val();
        var min = jQuery('[name="min"]').val();
        var count = (max - min) / step;
        var sliderData = {};
        for(i=0; i<=count; i++){
            var value = min + (step * i);
            sliderData.answers[i] = value; // key => value created here
        }
        return sliderData;
    }

I'm getting this error:

Uncaught TypeError: Cannot set property '0' of undefined

Does anyone have a good solution for this?

Upvotes: 1

Views: 490

Answers (2)

andres descalzo
andres descalzo

Reputation: 14967

this would be a proper way to create sliderData

    var sliderData = { answers: [] };
    for(i = 0; i <= count; i++) {
        var value = min + (step * i);
        sliderData.answers[i] = value; 
    }

complete code:

function sliderCalc() {
    var
        step = jQuery('[name="step"]').val(),
        max = jQuery('[name="max"]').val(),
        min = jQuery('[name="min"]').val(),
        count = (max - min) / step,
        sliderData = {
            answers: []
        },
        value = 0;

    for (i = 0; i <= count; i++) {
        value = min + (step * i);
        sliderData.answers[i] = value; // key => value created here
    }
    return sliderData;
}​

Upvotes: 0

STO
STO

Reputation: 10658

You need create answers property first of assigning array elements:

sliderData.answers = new Array();

Upvotes: 1

Related Questions