Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Передать checkbox-ы в GET в виде одной переменной и значений с разделителем
 
 автор: Sywooch   (08.05.2017 в 08:45)   письмо автору
 
 

Здравствуйте!
Посоветуйте пожалуйста, как сделать передачу значений checkbox в get следующей конструкции.

<label>
<input type="checkbox" name="test" value="1">
1
</label>
<label>
<input type="checkbox" name="test" value="2">
2
</label>


Хочу получить в адресной строке test=1;2

По какой-то причине вариант с name="test[]" и результатом test[]=1&test[]=2 не подходит.

  Ответить  
 
 автор: elenaki   (08.05.2017 в 11:16)   письмо автору
 
   для: Sywooch   (08.05.2017 в 08:45)
 

Не бывает таких причин. Два поля с одним именем держать нет смысла.

  Ответить  
 
 автор: Sywooch   (08.05.2017 в 11:24)   письмо автору
 
   для: elenaki   (08.05.2017 в 11:16)
 

Возможно сам вопрос задал не правильно.
Возможно и не чекбоксы нужны или не со стандартным их поведением.
Основная цель добиться формирования необходимого get запроса.

В принципе получается это сделать, но не очень, как по мне, верным решением.

Массив данных передается в скрытый input и данные из него отправляются в get...

  Ответить  
 
 автор: confirm   (08.05.2017 в 12:16)   письмо автору
 
   для: Sywooch   (08.05.2017 в 11:24)
 

Зачем насиловать форму, если ее поля будут переданы и обычным способом?

  Ответить  
 
 автор: Sywooch   (08.05.2017 в 12:28)   письмо автору
 
   для: confirm   (08.05.2017 в 12:16)
 

Я не знаю, наверное для красоты...
Попал в руки скрипт где реализован такой вот метод обработки полученной строки:

$attrib = explode(";", \yii\helpers\Html::encode(Yii::$app->request->get($property['search'])));
 $query->andWhere([$property['field']=>$attrib]); 




Хотел понять, как же туда передавать данные?

  Ответить  
 
 автор: confirm   (08.05.2017 в 12:41)   письмо автору
 
   для: Sywooch   (08.05.2017 в 12:28)
 

В рамках РНР нельзя передавать поля формы под одним именем, не определяя их как элементы массива: name="name[]", name="name[]", ... В противном случае в массив $_GET попадет значение только последнего поля. А если определять как элементы массива, то будет получен массив name с значениями всех элементов. То есть склеивать все в одну строку, передавая ее одним полем формы, а затем на сервере разбивать вновь на массив надобности нет.

Так поступают только в узкоспециализированных задачах, и коли таковой метод на сервер определен, значит ищите и метод который обеспечивает такое поведение формы, он уже должен быть.

Сама же по себе такая задача для JS конечно не является проблемой.

  Ответить  
 
 автор: Sywooch   (08.05.2017 в 12:54)   письмо автору
 
   для: confirm   (08.05.2017 в 12:41)
 

Спасибо за ответ.
Я как раз и хотел про метод, но сформулировать вопрос удачно не вышло.


ЗЫ, В скрипте не реализована форма в принципе.

  Ответить  
 
 автор: confirm   (08.05.2017 в 13:10)   письмо автору
 
   для: Sywooch   (08.05.2017 в 12:54)
 

Yii это серверный фреймворк, искать в нем в коде серверной части клиентские сценарии бессмысленно. Но этот фреймворк использует парадигму модель-представление-контроллер, читайте документацию, поймете.

  Ответить  
 
 автор: Sywooch   (08.05.2017 в 15:06)   письмо автору
 
   для: confirm   (08.05.2017 в 13:10)
 

Я знаком с Yii.

Решение было найдено, спасибо всем за участие!

Работает вот так:

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">

  <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

<script type='text/javascript'>
$(window).load(function(){
$('form#sendform').submit(function() {
    var arr=[];  
    $('input:checked[name=test]').each(function(){
        arr.push($(this).val());
    });             
    $('#test').val(arr.join(';'));

    return true;
});

});
</script>

</head>

<body>
  <div class='controls'>
    <label class="checkbox">
        <input type="checkbox" name="test" value="190" checked>TEST 190</label>
    <label class="checkbox">
        <input type="checkbox" name="test" value="200">TEST 200</label>
    <label class="checkbox">
        <input type="checkbox" name="test" value="210">TEST 210</label>
</div>

<form id="sendform" method="get">
    <input id='test' type='hidden' name='test' />
    <button type="submit">Go</button>
</form>

</body>

</html>

  Ответить  
 
 автор: confirm   (08.05.2017 в 15:54)   письмо автору
 
   для: Sywooch   (08.05.2017 в 15:06)
 

Очень плохо сделано.

  Ответить  
 
 автор: Sywooch   (08.05.2017 в 16:28)   письмо автору
 
   для: confirm   (08.05.2017 в 15:54)
 

А не подскажете, в чем именно?
Это я подсмотрел где-то.
Сам не особо в теме

  Ответить  
 
 автор: confirm   (08.05.2017 в 17:39)   письмо автору
 
   для: Sywooch   (08.05.2017 в 16:28)
 

$(function() {
    $('#sendform').submit(function() {
        var chk = $('div.controls input:checked');
        if(!chk.length) return false;
        $('#test').val($.map(chk, function(e) {
            return e.value
        }).join(';'))
    });
})


Имена флажкам как и идентификаторы совсем не нужны.

  Ответить  
 
 автор: Sywooch   (08.05.2017 в 18:22)   письмо автору
 
   для: confirm   (08.05.2017 в 17:39)
 

Спасибо большое.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования