【问题标题】:JavaScript variable not in scopeJavaScript 变量不在范围内
【发布时间】:2026-02-18 06:40:01
【问题描述】:

我正在尝试编写一个 JavaScript 函数,它可以在使用 Play 框架关闭日期选择器时简单地更改页面。我遇到了一个问题,我正在使用的变量 (dateEntry) 似乎不在范围内。当我传入一个字符串时,下面的方法可以正常工作,但当我尝试传入应该从 datePicker 获取值的 dateEntry 时却不行。我以前从未使用过 Play 框架,所以我认为我做错了什么。非常感谢任何帮助。

<script>
            function moveToPlaylistPage() {
                var dateEntry = document.getElementById("dob").value;
                window.location.href = "@routes.PlaylistTableController.playlistTable(dateEntry)"
            }

            document.addEventListener('DOMContentLoaded', function() {
                const options = {
                    autoClose: true,
                    minDate: new Date(1954, 1, 1),
                    maxDate: new Date(2019, 12, 31),
                    yearRange: 70,
                    onClose: moveToPlaylistPage
                };
                const elems = document.querySelectorAll('.datepicker');
                const instances = M.Datepicker.init(elems, options);
            });
</script>

【问题讨论】:

    标签: javascript playframework


    【解决方案1】:

    路由字符串按字面意思传递到href 属性中,这就是为什么传递字符串值而不是变量名的原因。您要做的是将变量的值转换为字符串并将其传递。比如:

    function moveToPlaylistPage() {
        var dateEntry = document.getElementById("dob").value;
        window.location.href = "@routes.PlaylistTableController.playlistTable(" + dateEntry + ")"
    }
    

    如果您确实需要 IE 支持,可以正常工作,但如果可以,我更喜欢 template literal 语法:

    function moveToPlaylistPage() {
        var dateEntry = document.getElementById("dob").value;
        window.location.href = `@routes.PlaylistTableController.playlistTable(${dateEntry})`
    }
    

    Here is the compatibility matrix for template literal syntax.

    【讨论】: