более простой способ группировки многочисленных переменных по значению выбора? - PullRequest
0 голосов
/ 03 декабря 2011

спасибо за поиск.

Я все еще изучаю более сложное кодирование javascript и jquery, так что могу с некоторой помощью помочь, поскольку я понятия не имею о следующем или даже если это возможно!

Мне нужен лучший / более простой / короткий способ сделать следующее (обратите внимание, что я удалил ненужную проверку и т. Д.): «

function Findbox5( myform, box1, box2, box3, box4, box5, Storeall, s1, s2, s3, s4, s5)
   {
   //store values
     Myform = document.forms.myform;
     box1 = Myform.box1.value;
     box2 = Myform.box2.value;
     box3 = Myform.box3.value;
     box4 = Myform.box4.value;
     box5 = Myform.box5.value;
     s1 = Myform.s1.value;
     s2 = Myform.s2.value;
     s3 = Myform.s3.value;
     s4 = Myform.s4.value;
     s5 = Myform.s5.value;

     //set as one string

     Storeall = s1 + ":" + box1 + ";" + s2 + ":" + box2 + ";" + s3 + ":" + box3 + ";" + s4 + ":" + box4 + ";" + s4 + ":" + box5 + ";" ;

     // next function...

   } '

как вы можете видеть, у меня есть 5 полей ввода и соответствующие варианты выбора для каждого блока (каждый вариант имеет 4 варианта: 1,2,3,4.). когда пользователь вводит данные в поле, он выбирает соответствующую опцию. все поля и опции должны быть введены, после чего они отправляют форму.

эти данные будут отправлены мне по электронной почте в качестве переменной, хранящейся в storeall. что-то вроде 1: 1234; 2: 1324; 1: 3232; 4: 5434; 2: 3211;

Итак, я надеюсь упростить эти данные до следующей с помощью отдельной функции или той же самой функции: 1: 1234-3232; 2: 1324-3211; 4: 5434;

это возможно? или я сделал это самым простым способом?

любые комментарии или помощь приветствуются, еще раз спасибо

Ответы [ 2 ]

0 голосов
/ 03 декабря 2011

Если вы хотите все в форме, вы должны использовать serializeArray:

$('#my_form').submit(function() {
  var str = '';
  $.each($(this).serializeArray(), function () {
      str += this.name + ":" + this.value + ";";
  });
  sendByMail(str);
  return false;
});
0 голосов
/ 03 декабря 2011

Во-первых, вы захотите сгруппировать эти вещи в один элемент, с которым можно итерировать.Поэтому, если ваш HTML выглядит так:

<form>
    <input name="s1" />
    <input name="box1" />
    <input name="s2" />
    <input name="box2" />
    ...
</form>

Тогда, вероятно, лучше сделать что-то вроде:

<form>
    <div class="set">
        <input class="s" name="s1" />
        <input class="box" name="box1" />
    </div>
    <div class="set">
        <input class="s" name="s2" />
        <input class="box" name="box2" />
    </div>
    ...
</form>

Теперь вы установили некоторую общность между этими элементами, а не просто с разными именами./ идентификаторы.Каждый набор входов сгруппирован по классу .set, и в каждом наборе вы знаете, что будет два входа: один с классом .s и один с классом .box.Теперь итерировать с ними с помощью JQuery легко:

var str = "";
$("form div.set").each(
    function(index, element)
    {
        currentValueS = $(element).find("input.s").val();
        currentValueBox = $(element).find("input.box").val();
        str += currentValueS + ":" + currentValueBox + ";";
    }
);

При этом используется функция JQuery .each()..each() позволяет вам предоставить функцию для выполнения каждого из элементов, которые JQuery находит из указанного селектора.Здесь ваш селектор - form div.set, что означает «все div элементы, которые имеют класс .set и находятся в любом месте любого элемента form».Для каждого из этих элементов вам нужно найти значение элемента <input> с классом .s, а также значение элемента <input> с классом .box.Затем вы просто добавляете их в свою растущую переменную str.

...