2012-04-13 4 views
3

У меня вопрос о том, как условно скрыть или показать поле, основанное на выборе его родительского поля в Django.Как показать и скрыть поля формы на основе выбора из выпадающего меню в Django

** ОБНОВЛЕНИЕ: Я могу реализовать эту функцию этой функции, определив функцию в JavaScript, которая была протестирована с помощью некоторого простого HTML-кода. Однако, поскольку моя таблица ввода создается Django, может ли кто-нибудь сказать мне, как назвать эту функцию в Django 'onchange'? **

ОКОНЧАТЕЛЬНОЕ ОБНОВЛЕНИЕ: Я думаю, что для этого проще использовать jQuery. jQuery: Conditional show an element based on drop down box selection

Javascript: Объяснение: 1. Прежде чем сделать какой-либо выбор, можно увидеть только в раскрывающемся меню «Application» метод 2. Если один выбирает «Aerial Spray» из родительского окна, а затем новый выпадающее меню «Aerial Размер Dist» 3. Если один выбирает «Ground Spray» от родительского окна, а затем еще один выпадающий список «Первый тип спрей» потребуется ввод

<script type="text/javascript"> 
function display(obj,id1,id2) { 
txt = obj.options[obj.selectedIndex].value; 
document.getElementById(id1).style.display = 'none'; 
document.getElementById(id2).style.display = 'none'; 

if (txt.match(id1)) {document.getElementById(id1).style.display = 'block';} 
if (txt.match(id2)) {document.getElementById(id2).style.display = 'block';} 
</script> 

<table> 
<tbody align="center"> 
<tr><th>Application method:</th> 
<td><select onchange="display(this,'A','B')" name="method" id="id_method"> 
<option value="">Pick a method</option> 
<option value="A">Aerial Spray</option> 
<option value="B">Ground Spray</option> 
</select></td></tr></tbody> 

<tbody id="A" align="center" style="display: none;"> 
<tr><th><label for="id_aerial_size_dist">Aerial Size Dist:</label></th><td><select select name="aerial_size_dist" id="id_aerial_size_dist"> 
<option value="" selected="selected">Pick first</option> 
<option value="A1">Very Fine to Fine</option> 
<option value="A2">Fine to Medium (EFED Default)</option> 
</select></td></tr> 
</tr> 
</tbody> 

<tbody id="B" align="center" style="display: none;"> 
<tr><th><label for="id_spray_type">Ground spray type:</label></th><td><select name="spray_type" id="id_spray_type"> 
<option value="B1" selected="selected">Low Boom Ground Sprayer (20 Inches or Less)</option> 
<option value="B2">High Boom Ground Sprayer (20 to 50 Inches: EFED Default)</option> 
</select></td></tr></tbody></table> 

Django код, который не работает Теперь. Он нуждается в помощи обо всех определенных функциях 'display'.

updat, после добавления mark_safe код работает.

class GENEECInp(forms.Form): 
    application_method = forms.ChoiceField(required=True, choices=applicationmethod_CHOICES, initial='Aerial Spray', 
              widget=forms.Select(attrs={'onchange':mark_safe("display(this,'A','B','C','D');")}) 
+0

Это вещь в JavaScript. Посмотрите на jQuery – icn

+0

@icn, я новичок в программировании ... Возможно ли вам привести пример такого приложения? Спасибо! –

ответ

0

Вы будете нуждаться в какой-то обычай Javascript, чтобы скрыть или показать соответствующее поле. У вас есть javascript в этом виджете?

+0

Я думаю, что единственный javascript, который я получил, - это «onchange». Так что я должен посмотреть на медиа-класс Django? –

+0

Я не читал это правильно. Вы можете делать то, что вы делаете, установив onchange, но я не думаю, что это действительный javascript. Например, поле размера, вероятно, отображается как id_size в фактическом визуализированном HTML. Я сделал свой javascript как отдельные файлы javascript, включенные с использованием классов мультимедиа. Вы можете сделать это по-своему, но убедитесь, что ваш javascript верен. – dragonx

+0

Я могу выполнить эту функцию, определив функцию с помощью JavaScript, но знаете ли вы, как вызвать эту функцию в форме Django? См. Обновленную запись. –

Смежные вопросы