2014-04-15 4 views
0

내가보기에 여러 개의 체크 박스가 있고 각각의 데이터 속성을 몇 가지 예를 가지고jQuery로 제어 특성을 얻을 JSON 만들

enter image description here

버튼 내가 모든 확인란을 반복하고있어 클릭하면을 어느 것이 선택되고 내가 원하는 것은 각각의 선택된 체크 박스에 대해 데이터 가격과 값 필드를 얻고 json 배열을 생성하는 것입니다.

var boxes2 = $("#modifiersDiv :checkbox:checked"); 
      var selectedModifiers = []; 
      var modifierProperties = []; 
      for (var i = 0; i < boxes2.length; i++) { 

       for (var k = 0; k < boxes2[i].attributes.length; k++) { 
        var attrib = boxes2[i].attributes[k]; 
        if (attrib.specified == true) { 
         if (attrib.name == 'value') { 
          modifierProperties[i] = attrib.value; 
          selectedModifiers[k] = modifierProperties[i]; 
         } 
         if (attrib.name == 'data-price') { 
          modifierProperties[i] = attrib.value; 
          selectedModifiers[k] = modifierProperties[i]; 
         }     
        }      
       } 
      } 
      var jsonValueCol = JSON.stringify(selectedModifiers); 

나는 각각의 체크 박스의 값을 얻을 수 없습니다 그리고 난 첫 번째 하나의 값을 얻을 수있어 플러스 올바르지에 :

내가 지금까지 무엇을 가지고 형식,이게 내가 JSON으로 얻는 것입니다 :

[null,"67739",null,"1"] 

올바른 조언 어떻게 올바른 데이터를 얻을 수 있습니까? 사전에

감사합니다, Laziale의

+0

jsfiddle (http://jsfiddle.net/Zp3gP/)에서 원래 문제를 설정하는 중 몇 가지 좋은 대답이 나타났습니다. 코드를 테스트하는 데 사용할 수 있습니다. –

답변

1

이다, 뭔가 같은 :

var jsonValueObj = []; 
$("#modifiersDiv :checkbox:checked").each(function(){ 
    jsonValueObj.push({'value':$(this).val(),'data-price':$(this).attr('data-price')}); 
}); 
jsonValueCol = JSON.stringify(jsonValueObj); 

이 ATTR보다 발()를 사용하는 것이 일반적으로 더 나은 있습니다 ('값') . 스레드에 대한 자세한 내용은 다음을 참조하십시오. What's the difference between jQuery .val() and .attr('value')?

코드에 대해서는 루프를 입력 할 때마다 결과를 덮어 쓰는 경우가 많으므로 한 가지 대답 만있었습니다. 그렇지 않으면 형식화를 제외하고 괜찮 았지만 정확히 원하는 형식이 무엇인지 확실하지 않습니다. 당신이 갖고 싶은 결과의 예를 제공해 주시겠습니까?

+0

감사합니다. 솔루션이 도움이되었습니다. 도와 주신 모든 분들께 감사드립니다. – Laziale

0

이 값 (정수) 및 가격 (수레)와 배열을 제공한다 :

var selected = []; 

$("#modifiersDiv :checkbox:checked").each(function() 
{ 
    var val = parseInt($(this).val(), 10); 
    var price = parseFloat($(this).data("price"));  
    selected.push(val); 
    selected.push(price); 
}); 

편집 : Laziale의의 코멘트 이후 업데이트 대답. $(this)이 실제로 선택란을 타겟팅하지 않았습니다. 이제 체크 박스를 대상으로 지정해야합니다.

+1

$ (this) .val()은 jquery 함수를 트리거하는 버튼 속성을 트리거하기 때문에 좋은 선택자가 아닙니다. @ZiNNED – Laziale

+0

@Laziale 네가 맞다. 나는 그것이 작동하게하는데 필요한 변화를 반영하기 위해 해답을 업데이트했다. – ZiNNED

1

당신은 (객체의 바로 배열 임) JSON을 건너, 모든 검사 값으로 객체를 얻고 자신의 ....

var checked =[]; 
var getValues = function(){ 
    $('.modifiers').each(function(post){ 
    if($(this).prop('checked')){ 
     checked.push({'data-price':$(this).attr('data-price'),'value':$(this).attr('value')}); 
    } 
    }); 
} 

getValues(); 

확인 내가 부족 뭔가 분명하게하려는 경우 여기 ..하지만 마음은 당신은 JQuery와 배열을 구문 분석 $ .each를 사용할 수있는 곳

+0

오류 : $ (...) forEach는 함수가 아닙니다. – Laziale

+0

죄송합니다. 모든 것이 포함됩니다. – eskimomatt