在下拉按钮上调用ajax

2 投票
2 回答
916 浏览
提问于 2025-04-17 05:51

我创建了一个表单,并从 Category 模型中填充下拉框的值。这个功能正常。然后我在模板中这样显示这个表单 {{ language_form }},也没问题。现在我想在这个下拉框上实现 onchange 事件,使用 ajax。当下拉框的值改变时,这个函数会被调用。

补充一下:其实可以不使用 Django 表单这样做 <select onchange='ajaxfunction()'></select>,但我现在是用 Django 表单。

表单

from django import forms
from myapp.movie.models import Category
class Language(forms.Form):
     language = forms.ModelChoiceField(queryset=Category.objects.all())

这是我的 Ajax 函数

   function showMovie(str) {
        if (str == "") {
            document.getElementById("txtHint").innerHTML = "";
            return;
        }
        if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        }
        else {// code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                document.getElementById("txtHint").innerHTML = xmlhttp.responseText;
            }
        }
        xmlhttp.open("GET", "movie_list?q=" + str, true);
        xmlhttp.send();
    }

2 个回答

0

在你的表单最后加上这段代码。

...
</form>

    <script type="text/javascript">
        var ddl = document.getElementById('ddlYourDropDownListID');
        ddl.onchange = function() {
            var str = 'someValue';
            showMovie(str);
        };
    </script>

</body>
</html>
2

如果你只是想添加一个 onchange 属性,那么可以这样做:

class Language(forms.Form):
    language = forms.ModelChoiceField(queryset=Category.objects.all(), widget=forms.Select(attrs={'onchange':'ajaxfunction()'}))

或者你也可以手动渲染表单。

撰写回答