Соберите значения флажков в jQuery и отправьте их при отправке - PullRequest
2 голосов
/ 06 мая 2011

Я ссылался на это сообщение:

Опубликовать массив из нескольких значений флажков

И это сообщение на форуме jQuery:

http://forum.jquery.com/topic/checkbox-names-aggregate-as-array-in-a-hidden-input-value


Я пытаюсь собрать массив (или объединенную строку с запятыми, что угодно) значений флажков в скрытом поле ввода, используя jQuery.Вот код скрипта, который я использую:

<script type="text/javascript">
$("#advancedSearchForm").submit(function() {
 var form = this;
 $(form).find("input[name=specialty]").val(function() {
  return $("input:checkbox",form).map(function() {
   return $(this).attr("name");
  }).get().join();
 });
});
</script>

Фрагмент соответствующего HTML:

<form id="advancedSearchForm" name="advancedSearchForm" method="post" action="<?php echo site_url('/magcm/advancedSearch#results'); ?>">
<input type="checkbox" name="FCM" id="FCM" class="chk" value="FCM" <?php echo set_checkbox('FCM', 'FCM'); ?>/>
<input type="hidden" name="specialty" id="specialty" value="" />
<input class="button" name="submit3" id="submit3" type="submit" value="Search" />

Я пытался изменить "submit" на "submit3" в jQuery,который ломается (очевидно).Когда я печатаю_r ($ _ POST), флажки POST отображаются правильно, а сжатая скрытая переменная - нет.(Он публикует, но пустое значение.) Флажки сохраняются правильно с помощью взломанной функции CI set_value () (Дереку нужно реализовать это в основной стволе ... но это уже другая история)

Я уверен, что яЯ делаю что-то, что неправильно и легко указать.Последние 2 часа я просто бился головой об стену, пробовал различные функции, менял кучу вещей и анализировал их в инструментах разработчика Chrome (которые не показывают ошибок).

Помощь приветствуется.:)

Ответы [ 3 ]

4 голосов
/ 06 мая 2011

Допустим, вы применили класс, возможно, «tehAwesomeCheckboxen» для каждого флажка. Тогда

<script>

$("#advancedSearchForm").submit(function() {

     var chkbxValues = $(".tehAwesomeCheckboxen").val();
     $("#specialty").val( chkbxValues.join(",") );

});

</script>

EDIT:

Я не думаю, что массив $ _POST заполняется, поскольку отправка обрабатывается локально механизмом JavaScript. ТАК ... давайте попробуем это:

<script>
    var chkbxValues = new Array();

    $(".tehAwesomeCheckboxen").live("change", function(e){
        var val = $(this).val();

        if( $(this).is(":checked") ) {
            if( chkbxValues.length == 0 || chkbxValues.indexOf(val) == -1){
                // Add the value 
                chkbxValues.push(val);
            }
        }
        else {
            // remove the value
            chkbxValues.splice( chkbxValues.indexOf(val), 1 );
        }

        $("#specialty").val( chkbxValues.join(",") );
    });

</script>

Это добавляет обработчик событий к самим флажкам, так что установка / снятие флажка изменяет скрытый элемент. Тогда ваша форма обрабатывает отправку как обычно.

Это больше соответствует тому, что вы пытаетесь сделать?

P.S. Те, кто проголосовал за это, обратите внимание, что я изменил свой ответ. Пожалуйста, убедитесь, что вы по-прежнему считаете это полезным, и соответственно измените свой голос.

1 голос
/ 09 мая 2011

В итоге я решил решить эту проблему, используя массивы PHP, а не jQuery:

<input type="checkbox" name="chk[]" id="RET" class="chk" value="RET" <?php echo set_checkbox('chk', 'RET'); ?>/>

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

0 голосов
/ 06 мая 2011

В вашем JavaScript много вложенных функций (), что затрудняет отслеживание того, что вы делаете.

Однако кажется, что вы просто передаете функцию в .val (), а не фактическое значение. Попробуйте вместо этого:

<script type="text/javascript">
$("#advancedSearchForm").submit(function() {
 var form = this;
 $(form).find("input[name=specialty]").val((function() {
  return $("input:checkbox",form).map(function() {
   return $(this).attr("name");
  }).get().join();
 })());
});
</script>

Или, что еще лучше, сначала рассчитайте значение:

<script type="text/javascript">
$("#advancedSearchForm").submit(function() {
 var form = this;
 var value = $("input:checkbox",form).map(function() {
   return $(this).attr("name");
 }).get().join();
 $(form).find("input[name=specialty]").val(value);
});
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...