2016-05-10 5 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); 
      }); 
     } 
    }); 
} 

Я хочу найти каждый установленный флажок, а затем распечатать каждую из пар имя/значение для флажка. Но это не работает, ничего не получает извещение, и я думаю, что я мог бы использовать $ (это) неправильно, потому что это работает, когда я использую .each:

$(':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, но это немного не должно быть проблемой. Я удалил событие события onChange, поскольку я не думал, что это было вашим намерением, и на самом деле не было смысла смешивать его так, как вы это делали. И использовал консольный журнал вместо предупреждения, так как мне стало легче на глаза, но в противном случае изменилось как можно меньше.

Смежные вопросы