views:

6526

answers:

5

I have array of select tag.

<select id='uniqueID' name="status">
      <option value="1">Present</option>
      <option value="2">Absent</option>
 </select>

and I want to create a json object having two fields 'uniqueIDofSelect and optionValue' in javascript.

I use getElementsByName("status") and I iterate on it.

EDIT

I need out put like

[{"selectID":2,"OptionValue":"2"},
{"selectID":4,"optionvalue":"1"}]

and so on...

+5  A: 

From what I understand of your request, this should work:

<script>
//  var status  = document.getElementsByID("uniqueID"); // this works too
    var status  = document.getElementsByName("status")[0];
    var jsonObj = {};

    for (var i = 0; i < status.options.length; i++) {
        jsonObj.push({id: status.options[i].text, optionValue: status.options[i].value});
    }
</script>
michael
JSON is an object and not an array.
Gumbo
Sorry for late response but I have updated Question.
Vikas
It creates json object array. but I need only one json object.
Vikas
+1  A: 
var sels = //Here is your array of SELECTs
var json = { };

for(var i = 0, l = sels.length; i < l; i++) {
  json[sels[i].id] = sels[i].value;
}
Josh Stodola
+1  A: 

If you want a single JavaScript object such as the following:

{ uniqueIDofSelect: "uniqueID", optionValue: "2" }

(where option 2, "Absent", is the current selection) then the following code should produce it:

  var jsObj = null;
  var status = document.getElementsByName("status")[0];
  for (i = 0, i < status.options.length, ++i) {
     if (options[i].selected ) {
        jsObj = { uniqueIDofSelect: status.id, optionValue: options[i].value };
        break;
     }
  }

If you want an array of all such objects (not just the selected one), use michael's code but swap out status.options[i].text for status.id.

If you want a string that contains a JSON representation of the selected object, use this instead:

  var jsonStr = "";
  var status = document.getElementsByName("status")[0];
  for (i = 0, i < status.options.length, ++i) {
     if (options[i].selected ) {
        jsonStr = '{ '
                  + '"uniqueIDofSelect" : '
                  + '"' + status.id + '"'
                  + ", "
                  + '"optionValue" : '
                  + '"'+ options[i].value + '"'
                  + ' }';
        break;
     }
  }
system PAUSE
+1  A: 

Your question is pretty hard to decode, but I'll try taking a stab at it.

You say:

I want to create a json object having two fields uniqueIDofSelect and optionValue in javascript.

And then you say:

I need output like

[{"selectID":2,"optionValue":"2"},
{"selectID":4,"optionvalue":"1"}]

Well, this example output doesn't have the field named uniqueIDofSelect, it only has optionValue.

Anyway, you are asking for array of objects...

Then in the comment to michaels answer you say:

It creates json object array. but I need only one json object.

So you don't want an array of objects?

What do you want then?

Please make up your mind.

Rene Saarsoo
First thing: sorry that uniqueIDofSelect == selectID (Id of select element, I can keep my record's id as select element id (for record update perpose). I'll also have number of select element generated by foreach loop. Actually this loop is which we are using in asp.net MVC for displaying Enumerable objects. 2) You are right, My mistake that I was amusing that whole output is one json object. But it is actualy array of object. And so michael's answer is perfect. Thanks for Pointing out.
Vikas
A: 

why

var x={};

X.push({userId: "userId", locationId: "locationId"});

is error for me?

An answer is not the right place to ask a question. Start a new thread instead.
Marko