2016-05-10 51 views
0

我有一堆html複選框。每個複選框被描述爲這樣的:

echo "<td>" 
    echo "<input type = \"checkbox\" name=\"name\" value=\"$name\">"; 
    echo "<input type = \"hidden\" name=\"user\" value=\"$user\">"; 
echo "</td>" 

然後,我有一個提交按鈕,點擊運行一些JavaScript時:

echo "<input type=\"button\" name =\"send\" value=\"Submit\" onclick=\"get_checked(form)\">"; 

現在我的javascript:

function get_checked(form){ 
    $("input[type='checkbox']").change(function() {   
     if($(this).is(':checked')){ 
      $(this).find("input[name]").each(function(index, node){ 
       formData[node.name] = node.value; 
       alert (node.name + node.value); 
      }); 
     } 
    }); 
} 

我想找到每個選中的複選框,然後打印出每個複選框的名稱/值對。但它不工作如無被驚動,我想我可能會使用$(本)不正確,因爲這工作,當我使用。每個:

$(':checkbox:checked').each(function(i){ 
    testname_checked[i] = $(this).val(); 
    alert(testname_checked[i]); 
}); 

任何想法?

+3

$(this).find ...將查找複選框後代的元素(我懷疑它有任何)。 – James

+1

當您提交表單時,您將附加事件處理程序,並且您不會取消表單提交。你選擇哪個是複選框的孩子? – epascarello

+0

因此,您看起來像是在點擊處理程序中附加了更改處理程序。那是不對的。您需要附加更改處理程序。 –

回答

0

只需在複選框中添加點擊處理程序。

$(":checkbox").click(function() { 
    $(this).next("input[type=hidden]").val(this.checked ? this.value : ''); 
}); 
0

我不是很確定你想達到什麼樣的,但我用我的你的目的是什麼解釋創造了這個jsfiddle

這是代碼

$('#btn').click(function (e){ 
     var formData = {}; 
    $("input[type='checkbox']").each(function() { 
     if($(this).is(':checked')){ 
       formData[$(this).attr('name')] = $(this).val(); 
     } 
    }); 
    console.log(formData); 
}); 

我重視在JS click事件,但該位不應該是一個問題。我刪除了onChange事件,因爲我不認爲這是你的意圖,並且它沒有真正意義上的混合它的方式。並且使用控制檯日誌而不是警報,因爲我覺得在眼睛上更容易,但是儘可能少地改變。