возможность чтения трех выбранных тегов с одинаковым именем - PullRequest
1 голос
/ 14 июля 2009

Как мне иметь три или более тега выбора с одинаковыми именами (как в моей программе, теги выбора генерируются динамически), и независимо выбирать, какой вариант был выбран. У меня есть цикл, где мой php читает таблицу SQL, и для каждой строки он создает тег выбора и кнопку с ним.

<select name="vote">
    <option value="1">1</vote>
    <option value="2">2</vote>
    <option value="3">3</vote>
</select>

<input type="button" onclick="vote()">

Итак, предположим, у меня есть 3 строки в моей таблице sql, поэтому будут созданы 3 тега select с кнопками.

Теперь мой вопрос: как я могу узнать, какой тэг select имеет какую опцию выбран?

Может ли кто-нибудь помочь мне с этим.

Zeeshan

Ответы [ 4 ]

6 голосов
/ 14 июля 2009

Если они имеют одинаковые имена, то единственный способ различить их - это сделать так, чтобы все их значения были уникальными для конкретного элемента select.

Если это невозможно, вы должны дать им разные имена (например, name="vote[<?php echo $row_id; ?>]").

Кроме того, «особенность» PHP требует, чтобы при наличии нескольких элементов с одинаковым именем имя должно заканчиваться символами «[]», чтобы обеспечить доступ к более чем одному из представленных значений.

3 голосов
/ 14 июля 2009

Если у вас есть несколько элементов в форме с идентичными атрибутами name, они становятся коллекцией (по сути, массивом) в DOM.

Так что, где вы могли бы выбрать один, как это

<form name="test">
  <select name="example"></select>
</form>

Вы бы получили доступ к элементу выбора следующим образом:

document.forms.test.example;

Теперь, если у вас было 2 или более, как это

<form name="test">
  <select name="example"></select>
  <select name="example"></select>
  <select name="example"></select>
</form>

Вы будете обращаться к ним в DOM, как это

document.forms.test.example[0];
document.forms.test.example[1];
document.forms.test.example[2];

EDIT

Да, на стороне PHP он не распознает несколько значений, если вы не добавите [] к имени - это говорит PHP не заменять значения с одинаковым именем ключа, а использовать их как массив.

<form name="test">
  <select name="example[]"></select>
  <select name="example[]"></select>
  <select name="example[]"></select>
</form>

Тогда вы бы прочитали эти значения примерно так

<?php

$exampleArray = $_GET['example'];
// you can now loop over $exampleArray or whatever.
0 голосов
/ 14 июля 2009
<script>
function vote(){
    var sIdx=document.getElementById('vote').selectedIndex;
    alert(document.getElementById('vote').options[sIdx].value);
}

</script>
0 голосов
/ 14 июля 2009

Если вам нужны три отдельных <select>, которые должны содержать одинаковые значения <option>, то вам нужно иметь разные атрибуты name, по крайней мере, если вы хотите, чтобы все было просто. Если - однако - вы можете использовать какой-нибудь JS / jQuery, тогда вы можете установить три разных id на эти <select> s и "имитировать" разные имена с помощью AJAX. Как то так:

var v1 = $("#select1").val();
var v2 = $("#select2").val();
var v3 = $("#select3").val();

$.ajax({
  type: "POST",
  url: "someurl.php",
  data: "select1="+v1+"&select2="+v2+"&select3="+v3,
  success: function(msg){
    alert( "Data Saved: " + msg );
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...