2013-07-10 34 views
-1

我正在尋找我的問題的解決方案。我有一堆複選框,並基於他們被檢查我想發送到ajax調用的值。如何將值從檢查輸入傳遞給ajax調用

這裏是我的html ...

<div class="control-group "> 
<label for="qualifications" class="control-label required">Qualifications</label> 
<div class="controls"> 
    <table class="table"> 
     <tbody> 
      <tr> 
       <td>Induction</td> 
       <td> 
        <div class="switch" data-on-label="In" data-on="info" data-off-label="Out"> 
         <input id="qual" name="qual[1]" type="checkbox" value="1"> 
        </div> 
       </td> 
      </tr> 
      <tr> 
       <td>LearnerZone Academy</td> 
       <td> 
        <div class="switch" data-on-label="In" data-on="info" data-off-label="Out"> 
         <input id="qual" name="qual[7]" type="checkbox" value="7"> 
        </div> 
       </td> 
      </tr> 
     </tbody> 
    </table> 
</div> 
</div> 

<div class="control-group "> 
<label for="units" class="control-label required">Units</label> 
<div id="unit-holder" class="controls"> 
    <table class="table"> 
     <tbody> 
      <tr> 
       <td>Data Protection (DP1)</td> 
       <td> 
        <div class="switch" data-on-label="In" data-on="info" data-off-label="Out"> 
         <input name="unit[7]" type="checkbox" value="7"> 
        </div> 
       </td> 
      </tr> 
      <tr> 
       <td>Equal Opportunities (EQ1)</td> 
       <td> 
        <div class="switch" data-on-label="In" data-on="info" data-off-label="Out"> 
         <input name="unit[3]" type="checkbox" value="3"> 
        </div> 
       </td> 
      </tr> 
      <tr> 
       <td>Health &amp; Safety (HS1)</td> 
       <td> 
        <div class="switch" data-on-label="In" data-on="info" data-off-label="Out"> 
         <input name="unit[1]" type="checkbox" value="1"> 
        </div> 
       </td> 
      </tr> 
     </tbody> 
    </table> 
</div> 

而jQuery的...

// Makes the question count 
$("input[type=checkbox]").on('change', function(){ 

var units = $('#unit[]'); 
var stringy = JSON.stringify(units); 

//EDIT 
//I'm actually looking for both qualifications and units 
var qualifications = $('#qualifications[]'); 
var stringy = JSON.stringify(qualifications); 

$.ajax({ 
    type: "POST", 
    url: "http://vle.dev/ajax/question-count", 
    data: {units: units, qualifications: qualifications}, 
    dataType: "text" 
}).done(function(data) { 
    $('.qCount').html(data); 
}); 
}); 

有人能幫助我嗎?

+0

我認爲你正在尋找'.serialize',而不是'JSON.stringify'。 – Alnitak

+0

您的'input'元素編碼錯誤。他們應該以'/>'結尾,而不是'>' – musefan

+0

@musefan這取決於文檔類型,不是嗎? – zeroflagL

回答

0

首先,您需要獲取元素。我覺得你的情況這將是最好看的所有元素與name與「單位」開頭:

var elements = $("[name^='unit']"); 

然後,您可以循環那些和檢查者添加到一個數組:

var units = []; 
for(var i = 0; i < elements.length; i++){ 
    var element = $(elements[i]); 
    if(element.is(":checked")){ 
     units.push(element.val()); 
    } 
} 

然後,您可以將該數組傳遞給您的ajax數據屬性。

例如,如果您選中了前兩個箱子離開了第三勾選,那麼該units陣列將[7, 3]

Here is a working example

-1
$("input[type=checkbox]").on('change', function(){  
    var IsChecked = $(this).is(':checked'); 


    if(IsChecked == true) 
    { 
     var Unit = $(this).val(); 
      $.ajax({ 
      type: "POST", 
       url: "http://vle.dev/ajax/question-count", 
       data: {units: Unit }, 
      dataType: "text" 
       }).done(function(data) { 
      $('.qCount').html(data); 
      }); 
    } 
}); 
+0

這是什麼? – musefan

+0

你甚至不會在任何地方設置「單位」。您也沒有按照OP – musefan

+0

的要求考慮其他複選框您的編輯是一種改進,但我相信OP期望所有值都被傳遞,而不僅僅是正在改變的值,並且我認爲應該調用ajax不斷變化的元素的檢查狀態 – musefan

0
$("input[type=checkbox]").on('change', function(){ 

var units = new Array(); 
$('#unit-holder :checked').each(function(){ 
     units.push($(this).val()); 
}) 
var stringy = JSON.stringify(units); 

$.ajax({ 
    type: "POST", 
    url: "http://vle.dev/ajax/question-count", 
    data: {units: stringy}, 
    dataType: "text" 
}).done(function(data) { 
    $('.qCount').html(data); 
}); 
}); 
0

如果你只想要發送的值你可以這樣做的單位:

$("input[type=checkbox]").on('change', function(){ 
    $.ajax({ 
    type: "POST", 
    url: "http://vle.dev/ajax/question-count", 
    data: $("[name^='unit']:checked").serialize(), 

如果請求必須是JSON你可以這樣做以下:

var units = {}; 
$("[name^='unit']:checked").each(function() { 
    units[this.name] = this.value; 
} 
... 
data: JSON.stringify(units); 

我們不知道你要還的確切格式。所以你可能需要調整代碼。

+0

可能是一個很好的答案。我很猶豫,但它仍然upvote,因爲它不清楚OP想要通過什麼格式'單位' – musefan

+0

@musefan好點 – zeroflagL

+0

實際上我必須設置的複選框,我需要通過,我不包括他們作爲我認爲我可以使用這個原則並將其應用於此。我會用一切東西編輯原稿 – bencarter78

0

您可以試試這種方法。

  1. 對每個複選框點擊調用onclick這將存儲id或名稱任何按照您的要求在數組中。然後進行一次ajax調用並將整個數組傳遞給服務器端腳本。

  2. 或者您可以爲每個複選框單擊ajax調用。但是我不認爲這將是一個適當的方法,如果我們有大量的複選框。

如果在這個方法有問題,那麼請確認我。