2017-02-21 18 views
1

У нас есть несколько флажков, связанных с несколькими скрытыми полями с ИМЯ ИМЯ. Как мы можем отправлять только значения выбранных флажков?скрытые входы с одинаковым именем: как отправлять только значения выбранных флажков?

PHP

<input type"checkbox" name="<?echo $filename;?>_<?echo $variable;?>" 
id="filename_<?echo $variable;?>" value="1"> 

<input type="hidden" name="item_<?echo $filename;?>" 
value="<?echo $quantity;?>"> 

Если два или более флажков с тем же именем выбраны, как мы можем получить правильное значение для каждого скрытого ввода, а не всегда стоимости последней?

наш сгенерированный HTML

<input type"checkbox" name="idfilename_1" 
<input type="hidden" name="item_idfilename" value="7"> 

<input type"checkbox" name="idfilename_2" 
<input type="hidden" name="item_idfilename" value="5"> 

<input type"checkbox" name="idfilename_3" 
<input type="hidden" name="item_idfilename" value="11"> 
+0

также использовать '' item_idfilename1' item_idfilename2' ... – JustOnUnderMillions

ответ

0

Вы можете создать массив следующим образом:

<input type="checkbox" name="item_idfilename[]" value="7"> 
<input type="checkbox" name="item_idfilename[]" value="5"> 
<input type="checkbox" name="item_idfilename[]" value="11"> 

Таким образом, вы получите список проверяемых флажков.

0

Вы можете использовать массив как для флажков, так и для hiddens. Имея флажки с именем check [1], отметьте [2], отметьте [3] и hiddens, называемые item_hidden [1], item_hidden [2] и т. Д., Вы можете связать каждый флажок со скрытым вводом.

Таким образом, ваш выход будет:

<input type"checkbox" name="idfilename[1]" value="1"> 
<input type="hidden" name="item_idfilename[1]" value="7"> 

<input type"checkbox" name="idfilename[2]" value="1"> 
<input type="hidden" name="item_idfilename[2]" value="5"> 

<input type"checkbox" name="idfilename[3]" value="1"> 
<input type="hidden" name="item_idfilename[3]" value="11"> 

стороны сервера, вы будете цикл idfilename и, если значение установлено (Таким образом, флажок был установлен), вы будете принимать значение от item_idfilename массива.

+0

я должен сделать это: Ваш ответ показывает поля ввода с ' 1' в нем, и я не думаю, что это то, что хочет OP на реальной веб-странице, проверьте синтаксис ;-) – JustOnUnderMillions

+0

@JustOnUnderMillions Что это связано с чем-то связанным с вопросами? –

+0

Что ваш код не будет работать, если его использовать без изменений, из-за отсутствия '='. Я тоже не хочу быть грубым :-) – JustOnUnderMillions

0

Normaly его сделали таким образом

<input type"checkbox" name="idfilename_1"> 
<input type="hidden" name="item_idfilename_1" value="7"> 

Только проверенное раз будет иметь поле/индекс в массиве POST.

На стороне PHP получите поля из выбранных флажков.

Если известно, например, массив_key, например. idfilename_1, то вы можете принять значение от $_POST['item_idfilename_1'], если не оставить его.

Имейте в виду: только выбранные флажки будут иметь поле в массиве POST!

+0

Это всегда плохое решение иметь «нумерованные» переменные, когда вы можете использовать массивы и обеспечивать большую гибкость. –

+0

@ Michael Di Prisco Я сейчас, но в моем примере вы не можете использовать 'idfilename []', потому что вы больше не получаете отношения на стороне сервера к полям 'item_idfilename_'. – JustOnUnderMillions

+0

Вы можете положить ключ между скобками. В цикле OP мы имеем переменную с именем $ variable, которая является уникальной и инкрементальной, поэтому мы можем использовать такую ​​переменную, как ключ массива. –

0

Попробуйте это:

var $checkedInput = $('input[type=checkbox]:checked'); 
    if($checkedInput){ 
     var hiddenValue= $checkedInput.next('input[type=hidden]').val(); 
    } 

--------------- или -------------------

var $checkedInput= $('input[type=checkbox]:checked').next('input[type=hidden]') 
        .map(function() { 
         return $(this).val(); 
        }).get(); 

вы получите массив как ["7", "5", "11"] в соответствии с вашим кодом.

+0

Плохое решение. Всегда избегайте использования jQuery, когда это возможно, и ретранслируйте по совместимым с браузером и выполняющим методам, таким как именование имен массивов в разных браузерах. –

+0

Ваше решение кажется очень многообещающим, но сценарий, похоже, не работает. Мы что-то упускаем? :-) Какие-нибудь хитрости? – steph

0

Я использовал next(), чтобы получить следующее значение узла

$('[type~=checkbox]').change(function(){ 
 
    alert($(this).next().val()); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="checkbox" name="idfilename_1"> 
 
<input type="hidden" name="item_idfilename" value="7"> 
 

 
<input type="checkbox" name="idfilename_2"> 
 
<input type="hidden" name="item_idfilename" value="5"> 
 

 
<input type="checkbox" name="idfilename_3"> 
 
<input type="hidden" name="item_idfilename" value="11">

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

  • Нет связанных вопросов^_^