使用ajax根据选择值获取div的数据

Posted

技术标签:

【中文标题】使用ajax根据选择值获取div的数据【英文标题】:Get data for div based on select value with ajax 【发布时间】:2022-01-21 13:20:54 【问题描述】:

我目前无法根据从下拉列表中选择的值在同一页面上获取 div 的数据。

我有一个下拉菜单,用户可以在其中选择一个值。下拉列表从 CourseOverview-Model 获取数据。根据选择,页面第二部分的 div 也应填充来自 CourseOverview-Model 的数据。在我的代码中,console.log 显示了我选择的值。但我坚持要获得与整个数据的连接,以便填写页面的第二部分。任何帮助表示赞赏。

我们的目标是在下一步中创建一个带有预填表的个人记分卡。

我的 html 看起来像这样:

<!--Dropdown-->
<div class="container">
        <select id="choosecourse">
            <option value="">Select course</option>
            % for course in courses % 
            <option> course.name </option>
            % endfor %
        </select>
</div>

<!--Second part of the page which should be filled in based on the selection-->
<div class="container">
        <h5> id.name </h5>
</div>
<div class="container">
        <table class="table input-width">
            <tr>
                <td>Holes:</td>
                <td> id.holes </td>
                <td>Par:</td>
                <td> id.par </td>
            </tr>
            <tr>
                <td>Your handicap:</td>
                <td> user.handicap </td>
                <td>Extra strokes:</td>
                <td><input type="number" min="0"></td>
            </tr>
    </table>
</div>

我的 javascript 看起来像这样:

<script>
        $(document).ready(function() 
            $('#choosecourse').change(function()
                var name = document.getElementById("choosecourse").value;
                console.log(name)
                );
            );
</script>

我的 views.py 看起来像这样:

def add_score(request):
        courses = CourseOverview.objects.all()
        return render(request, "mrc/add_score.html", 
            "courses": courses
        )

这些都是models.py中的必要模型:

class CourseOverview(models.Model):
    course_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=64, unique=True)
    par = models.PositiveIntegerField()
    holes = models.PositiveIntegerField()


class Course(models.Model):
    course = models.ForeignKey("CourseOverview", on_delete=CASCADE, related_name="course")
    hole = models.PositiveIntegerField()
    holepar = models.PositiveIntegerField()
    holehcpi = models.PositiveIntegerField()

编辑 我尝试了以下示例:

<div class="container">
        <select id="choosecourse">
            <option value="">Select course</option>
            % for course in courses % 
            <option> course.name </option>
            % endfor %
        </select>
</div>

<!--Second part of the page which should be filled in based on the selection-->
<div class="container">
        <h5 id="name"></h5>
</div>
<div class="container">
        <table class="table input-width">
            <tr>
                <td>Holes:</td>
                <td id="holes"></td>
                <td>Par:</td>
                <td id="par"></td>
            </tr>
            <tr>
                <td>Your handicap:</td>
                <td> user.handicap </td>
                <td>Extra strokes:</td>
                <td><input type="number" min="0"></td>
            </tr>
    </table>
</div>

Javascript

$(document).ready(function() 
            $('#choosecourse').change(function()
                var name = document.getElementById("choosecourse").value;
                fetch("mrc/add_score.html", 
                    method: "PUT",
                headers:
                    'Accept': 'application/json',
                    'X-Requested-With': 'XMLHttpRequest', 
                ,
            )
            .then(response => 
                return response.json()
            )
            .then(data => 
                document.querySelector('#name').innerhtml = id.name
                document.querySelector('#holes').innerhtml = id.holes
                document.querySelector('#par').innerhtml = id.par
            )))

还有views.py:

def add_score(request):
    if request.method == "PUT":
        data = CourseOverview.objects.all()
        return JsonResponse(data)
    else:
        courses = CourseOverview.objects.all()
        return render(request, "mrc/add_score.html", 
            "courses": courses
        )

【问题讨论】:

您没有为&lt;option&gt; 元素提供value 属性。除此之外,请更详细地解释你卡在哪里。当您进行选择时,要填写此表的数据来自哪里? 我已经指定了我的帖子。即使选项元素没有 value 属性,我的代码的 console.log(name) 部分也会显示所选选项。所以这是有效的。数据来自我的 CourseOverview-Model(请参阅我的 views.py)。我还坚持从 CourseOverview-Model 获取正确的数据来填写表格。我尝试了不同的 ajax-get 和 put 解决方案,但没有任何效果。 向我们展示您的 ajax 尝试。 SO 不是免费的代码编写服务。应该很容易找到很多使用ajax的教程 我编辑了我的帖子并添加了我尝试过的东西之一。 【参考方案1】:

我为我的问题找到了另一种解决方案。由于我的页面已经包含了它需要的所有信息,我为所有包含我想要的数据的 div 添加了一个 for 循环并隐藏它们。

在下一步中,我添加了一些 javascript 来显示在下拉列表中选择的 div 并隐藏其他的。

这里是对应的代码。希望这可以帮助遇到类似问题的人。

HTML

<div class="container">
        <select id="choosecourse">
            <option value="">Select course</option>
            % for course in courses % 
            <option> course.name </option>
            % endfor %
        </select>
</div>

<!--Second part of the page which should be filled in based on the selection-->
<div class="container">
        <h5 id="name"></h5>
</div>
<div class="container">
        % for course in courses %
        <div style="display: none;" class="hidethem" data-name=" course.name ">
            <div><h5 id=> course.name </h5></div>
            <div><table class="table input-width">
                <tr>
                    <td>Holes:</td><td> course.holes </td>
                    <td>Par:</td><td> course.par </td>
                </tr>
                <tr>
                    <td>Your handicap:</td><td> user.handicap </td>
                    <td>Extra strokes:</td><td><input type="number" min="0"></td>
                </tr>
            </table></div>
        </div>
        % endfor %
</div>

我的 javascript 看起来像这样:

$(document).ready(function() 
            $('#choosecourse').change(function()
                let name = document.getElementById("choosecourse").value;
                console.log(name);
                $(".hidethem").hide();
                document.querySelector("[data-name=" + CSS.escape(name) + "]").style.display = 'block';
                );
            );

不过感谢有机会在这里讨论问题!

【讨论】:

以上是关于使用ajax根据选择值获取div的数据的主要内容,如果未能解决你的问题,请参考以下文章

通过从 javascript 文件中查询数据库,根据下拉菜单中的选择更新 div 内容

根据多个下拉选择从对象中获取相应的值

Django 使用来自 Ajax 的成功数据更新模板 div

如何在提交到 PHP 之前使用 AJAX 从选择标签中获取数据?

使用ajax codeigniter php根据日期检索数据库值

如何根据值将 css 类添加到选择列表选项中 - 使用 jQuery