4

我有一个关于如何根据 Django 中对其父字段的选择有条件地隐藏或显示字段的问题。

**更新:我可以通过在 JavaScript 中定义一个函数来实现这个特性,这个函数已经用一些简单的 HTML 代码进行了测试。但是,由于我的输入表是由 Django 创建的,谁能告诉我如何在 Django 'onchange' 中调用这个函数?**

最后更新:我认为使用 jQuery 更容易做到这一点。 jQuery:有条件地显示基于下拉框选择的元素

Javascript: 说明: 1. 在进行任何选择之前,只能看到一个下拉菜单“应用方法” 2. 如果从父框中选择“Aerial Spray”,则会出现一个新的下拉菜单“Aerial Size Dist” 3 . 如果从父框中选择“Ground Spray”,则需要输入另一个下拉列表“Ground spray type”

<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 代码,现在不起作用。它需要有关所有已定义功能“显示”的帮助。

更新,添加 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');")})
4

1 回答 1

0

您将需要一些自定义 javascript 来隐藏或取消隐藏相应的字段。你在这个小部件中有任何 javascript 吗?

于 2012-04-13T15:52:33.640 回答