2013-07-30 2 views
2

яваскрипта Вот мой код:Как ввести многократный Флажок значения в скрытое текстовое поле через

<script type="text/javascript" xml:space="preserve"> 

function ATHD(f) { 

var aa = "I would like help with the following topic(s): " 
var bb = "Password Reset " 
var cc = "Password Setup " 
var dd = "Firmware Upgrade (if applicable) " 
var ee = "Local Access Setup " 
var ff = "Remote Access Setup " 
var gg = "Mobile Access Setup " 
var hh = "Recording Schedule Setup " 
var ii = "How to playback video " 
var jj = "How to convert video " 
var kk = "Email Notification Setup " 
var ll = "PTZ Setup (if applicable) " 

if(f.pr.checked == true) { 
    f.sup.value = aa + bb; 
} 
if(f.ps.checked == true) { 
    f.sup.value = aa + cc; 
} 


} 

</script> 
<form><input onclick="ATHD(this.form)" id="1" type="checkbox" name="pr" />&#160;Password Reset<br /> 
<input onclick="ATHD(this.form)" id="2" type="checkbox" name="ps" />&#160;Password Setup<br /> 
<input onclick="ATHD(this.form)" id="3" type="checkbox" name="fu" />&#160;Firmware Upgrade (if applicable)<br /> 
<input onclick="ATHD(this.form)" id="4" type="checkbox" name="la" />&#160;Local Access Setup<br /> 
<input onclick="ATHD(this.form)" id="5" type="checkbox" name="ra" />&#160;Remote Access Setup<br /> 
<input onclick="ATHD(this.form)" id="6" type="checkbox" name="ma" />&#160;Mobile Access Setup<br /> 
<input onclick="ATHD(this.form)" id="7" type="checkbox" name="rss" />&#160;Recording Schedule Setup<br /> 
<input onclick="ATHD(this.form)" id="8" type="checkbox" name="pb" />&#160;How to playback video<br /> 
<input onclick="ATHD(this.form)" id="9" type="checkbox" name="cv" />&#160;How to convert video<br /> 
<input onclick="ATHD(this.form)" id="10" type="checkbox" name="en" />&#160;Email Notification Setup<br /> 
<input onclick="ATHD(this.form)" id="11" type="checkbox" name="ptz" />&#160;PTZ Setup (if applicable)<br /> 
<br /> 
<span style="FONT-WEIGHT: bold">Question</span><span style="COLOR: #ff0000">*</span> (please be specific)<br /> 
<br /> 
<textarea style="HEIGHT: 164px; WIDTH: 577px" rows="10" cols="40"> 
</textarea></p> 

<p><button>Continue...</button> 
<textarea style="HEIGHT: 164px; DISPLAY: hidden; WIDTH: 577px" rows="10" cols="40" name="sup"> 
</textarea> 
&#160;</p> 
</form> 

В принципе, то, что я ищу, чтобы сделать это каждый раз, когда флажок установлен, то я хочу значение флажка на быть добавлены в скрытое поле. Я понимаю, что мне еще нужно добавить значение «значение = [значение флажка]» в html-коде; то, что я хочу разрешить, выбрано несколько флажков, чтобы в текстовое поле было добавлено несколько элементов.

Я понимаю, что одним из способов сделать это было бы создание операторов if-then для всех возможных вариантов; это не будет очень эффективным временем, так как будут тысячи перестановок.

Я также пытаюсь выяснить, использует ли массив массив, чтобы упростить это; Я не совсем уверен, как концептуализировать это простейшим способом, поскольку я занимаюсь только javascripting в течение трех недель. Если кто-то скажет мне, как об этом думать, я бы очень признателен. Глядя больше узнать, как это сделать, поэтому я могу внести свой вклад в эти форумы и упростить процесс создания скриптов, поскольку у меня нет фона в кодировании.

+0

Вам нужно скрытое поле ввода, а прокручиваемые не скрыты. ''.Кроме того, вы хотите, чтобы значение флажка было удалено из скрытого текста, если флажок не установлен? На самом деле это будет сложнее. –

+0

Какова конечная цель помещения всех значений в один скрытый вход? Возможно, мы можем предложить лучшее решение. –

+0

Я создаю макет формы для нашего сайта технической поддержки; у нас есть стандартизованный список документов по основным темам, которые я хочу дать нашим клиентам возможность выбора, чтобы наши агенты знали, чтобы отправить эти документы заранее. Я забыл положить в html «display: none»; на самом деле это будет поле, в котором мы закончим программирование, чтобы соответствовать таблице данных, но для макета я просто использую текстовую область. Меня больше беспокоит то, как множественные значения флажка получают ввод в текстовое поле без необходимости писать сумасшедшее количество скриптов. – AlmightyWhy

ответ

4

Если вы можете использовать JQuery, вам не нужно будет много коды:

Вы можете обновить результаты всякий раз, когда кто-то нажимает на флажке ($('input').on('click', function() {).

Я лично использовал бы элементы <label>, но это только я. Вы можете захватить значения по

$('input:checked').each(function() { 
    values.push($(this).parent().text()); 
}); 

Вот рабочий пример: http://jsfiddle.net/HarryPehkonen/zNfju/1/

+0

Эй, не могли бы вы помочь мне на последнем? [Я собрал эту функцию на основе того, что вы мне дали.] (Http://jsfiddle.net/vgMVP/2/) В принципе, я хочу, чтобы флажок, который переключает скрытый div, не установлен, все флажки в div не будут отмечены. Например, если «DVR» не отмечен, «Неполадка DVR 1, проблема DVR 2, проблема 3 DVR» не будет снята. Я попытался разобрать некоторые, если бы тогда утверждения, но он либо установил флажок, который переключил div, либо он испортил бы код. Если бы вы могли помочь мне в этом, я был бы очень благодарен; Спасибо! – AlmightyWhy

+0

@AlmightyWhy Проверьте [мое обновление для jsFiddle] (http://jsfiddle.net/vgMVP/3/). В принципе, он использует parent(), чтобы подойти к содержащему div, затем найти суб-флажки, отключив их (независимо от состояния исходного флажка). Другой трюк состоял в том, чтобы использовать событие («ev»), которое было передано обработчику нажатием(). Надеюсь, это поможет! –

+0

Это близко, но я пытаюсь получить что-то там, где, когда родительские флажки ложны, флажки child являются ложными. Не могу обернуть вокруг себя голову, чтобы она работала; Я попытался сделать что-то вроде того, что в тегах добавлен файл .checkbox («refresh»), но он обновляет флаги состояния дочерних элементов после того, как дважды щелкнул родительский флажок. – AlmightyWhy

0

Я сделал небольшие изменения ваш РОМ как удаление OnClick событий и может решить вашу проблему

var arr = []; 
remove_item = function(arr,value){ 
    for(b in arr){ 
     if(arr[b] == value){ 
      arr.splice(b,1); 
      break; 
     } 
    } 
    return arr; 
} 
var inputs = document.getElementsByTagName("input"); 
for(var i=0;i<inputs.length;i++) 
{ 
    if(inputs[i].getAttribute('type') == 'checkbox') 
    { inputs[i].addEventListener("change",function() { 
     if(this.checked) 
      arr.push(parseInt(this.id)); 
     else 
     { 
      remove_item(arr,parseInt(this.id)); 
     } 
      console.log(arr); document.getElementById("chcbx").value = arr.join(","); 
     },false); 
    } 
} 

и имеют a посмотреть на jsFiddleremove_item

0

Вот еще один способ сделать это.

// find number of checkboxes (you haven't specified if you 
// have a set number or not. If you have a set number, just 
// set checkboxCount to whatever number you have. 
var checkboxCount = 0; 
var inputTags = document.getElementsByTagName('input'); 
for (var i=0, length = inputTags.length; i<length; i++) { 
    if (inputTags[i].type == 'checkbox') { 
     checkboxCount++; 
    } 
} 

function ATHD() { 
    var totalValue = ''; 
    for (var i = 1; i < checkboxCount; i++) { 
     if (document.getElementById(i).checked) 
      totalValue += inputTags[i].getAttribute("name") + ';'; 
    } 
    document.getElementById("hdnValues").value = totalValue; 
    alert(totalValue); 
} 

Это в основном подсчитывает все галочки, перебирает все чеки, если они checked, получает значение атрибута name, а затем добавляет его в строку который ограничен ;

jsfiddle : http://jsfiddle.net/mcDvw/


В качестве альтернативы вы можете установить все значения, которые вы хотите, в атрибут value этого поля и прочитать, что вместо значения в переменной JS. например

HTML:

<input onclick="ATHD()" id="1" type="checkbox" name="pr" value="Password Reset" />&#160;Password Reset<br /> 
<input onclick="ATHD()" id="2" type="checkbox" name="ps" value="Password Setup" />&#160;Password Setup<br /> 

JS:

function ATHD() { 
    var totalValue = ''; 
    for (var i = 1; i < checkboxCount; i++) { 
     if (document.getElementById(i).checked) 
      totalValue += inputTags[i].value + ';'; 
    } 
    document.getElementById("hdnValues").value = totalValue; 
    document.getElementById("showValues").value = totalValue; 
} 

jsfiddle: http://jsfiddle.net/mcDvw/1/