Как получить выпадающий / выбрать вариант с несколькими значениями - PullRequest
1 голос
/ 29 января 2012

Я читал здесь другие вопросы, которые касались того, что я ищу. Но это все равно не помогло мне. Я хочу иметь несколько значений в опции тега выбора формы, которая будет публиковать информацию в другом файле, который будет доступен для просмотра посетителю с помощью iframe. Пример того, что я пытаюсь сделать:

В файле содержится следующее: Form.php

<div>
<form action"blank.php" method="post" target="box">
<select name="g1">
<option name="g1" value="Value 1, Value 2"> Text </option>
<option name="g1" value="Value 1, Value 2"> Text Blah </option>
</select>
<input type="submit" />
</form>
</div>
<iframe src="blank.php" name="box"></iframe>

Ниже приведены длинные строки того, что я хочу, чтобы появилось на: blank.php , который виден в iframe.

Значения опции 1 или 2 должны выглядеть следующим образом

[Значение 1] [Значение 2]

Пример:

Это выпадающее меню, в котором будут опубликованы два отдельных значения при выборе одной опции. Например, если я выбрал опцию, которая говорит Привет - привет , и он будет публиковать:

[Hola] означает [Hello].

и тег option будет иметь следующие значения:

<option name="g1" value="Hola, Hello">Hola - Hello</option>

Ответы [ 3 ]

2 голосов
/ 29 января 2012

Звучит так, как будто вы хотите построить массив полей формы, в которых допускается несколько значений. Прочтите руководство по PHP , чтобы узнать больше.

Из руководства:

Как получить все результаты из нескольких выбранных тегов HTML?

The выбор нескольких тегов в конструкции HTML позволяет пользователям выбирать несколько элементов из списка. Эти предметы затем передаются в действие обработчик формы. Проблема в том, что они все переданы с то же имя виджета. * 1012 Т.е. *

<select name="var" multiple="yes">

Каждая выбранная опция будет поступать в обработчик действий как:

var=option1
var=option2
var=option3

Каждая опция перезаписывает содержимое предыдущей переменной $ var. Решение состоит в том, чтобы использовать функцию PHP «массив из элемента формы». следует использовать следующее:

<select name="var[]" multiple="yes">

Это говорит PHP обрабатывать $var как массив и каждое присваивание значение var[] добавляет элемент в массив. Первый пункт становится $var[0], следующий $var[1] и т. Д. Функцию count() можно использовать для определить, сколько опций было выбрано, и функция sort() может использоваться для сортировки массива опций, если это необходимо. Обратите внимание, что если вы при использовании JavaScript [] в имени элемента может вызвать проблемы при попытке обратиться к элементу по имени. Используйте его числовую форму вместо идентификатора элемента или заключите имя переменной в одинарные кавычки и используйте это как индекс для массива элементов, например:

variable = document.forms[0].elements['var[]'];
1 голос
/ 29 января 2012

Прежде всего, вам не нужен атрибут name для каждого из ваших <option> элементов.Просто поле <select>.

Во-вторых, я думаю, что все, что вам нужно, это удобный денди explode функция .Вы получите значение, подобное этому ...

$values = $_POST['g1'];

... и затем разделите их на массив, подобный этому ...

$values = explode(', ', $values);

... и, наконец, простополучить доступ к значениям следующим образом:

$value1 = $values[0];
$value2 = $values[1];
0 голосов
/ 29 января 2012

Я знаю, что это в разделе PHP, но то, что вы пытаетесь сделать, было бы намного проще сделать с помощью javascript.Если вы измените теги iframe на:

<div id="valueDisplay"></div>

и добавите идентификатор и слушателя в select

<select name="g1" id="dropDown" onchange="showValues()">
<option name="g1" value="1"> Text </option>
<option name="g1" value="2"> Text Blah </option>
</select>

Вы просто напишите небольшой скрипт, подобный этому, и поместите его в тело:

<script type="text/javascript">
function showValues(){
    var outDiv = document.getElementById('valueDisplay');
    var selectValue = document.getElementById('dropDown').value;
    var divText;
    if(selectValue == 1) divText = '[ Value 1 ][ Value 2 ]';
    if(selectValue == 2) divText = '[ Value 1 ][ Value 2 ]';
    outDiv.innerHTML = divText;
}
</script>

Достичь того, что вы пытаетесь сделать с помощью фреймов, будет сложнее.Для публикации данных в iframe потребуется использовать javascript / jquery.

Обратите внимание, что использование onchange = "" больше не является приемлемым методом добавления слушателей.Это просто легче, если вы не знакомы с javascript.

...