从级联SELECT元素更改事件调用外部JS函数

时间:2012-05-26 05:22:33

标签: javascript jquery model-view-controller

我是一个jQuery noob,我试图找出如何将此脚本移动到外部.js文件。我已经尝试过复制它并在页面上引用但它似乎不起作用。

我在这里缺少什么?

<script type="text/javascript">
$(document).ready(function () {
    $('#YearD').change(function () {
        var selectedYear = $(this).val();
        if (selectedYear != null && selectedYear != '') {
            $.getJSON('@Url.Action("Months")', { year: selectedYear }, function (months) {
                var monthsSelect = $('#Month');
                monthsSelect.empty();
                $.each(months, function (index, month) {
                    monthsSelect.append($('<option/>', {
                        value: month.value,
                        text: month.text
                    }));
                });
            });
        }
    });
});
</script>

<script type="text/javascript">
$('#Month').change(function () {
    var selectedMonth = $(this).val();
    if (selectedMonth != null && selectedMonth != '') {
        $.getJSON('@Url.Action("Days")', { month: selectedMonth }, function (days) {
            var daysSelect = $('#Day');
            daysSelect.empty();
            if (days == 0) {
                daysSelect.css("visibility", "hidden");
            }
            else {
                daysSelect.css("visibility", "visible");
            }
            $.each(days, function (index, day) {
                daysSelect.append($('<option/>', {
                    value: day.value,
                    text: day.text
                }));
            });
        });
    }
});
</script>

3 个答案:

答案 0 :(得分:0)

将此添加到您希望代码运行的页面:

<script src="js_file_name.js"></script>

然后将代码直接复制并粘贴到名为js_file_name.js

的文件中

答案 1 :(得分:0)

从外部文件中删除<script type="text/javascript"></script>

将其添加到您的HTML文件中:

<script type="text/javascript" src="filename.js"></script>

答案 2 :(得分:0)

如果有,

<script type="text/javascript">
$(document).ready(function () {
   // your code
})

你应该这样做,

<script type='text/javascript' src='scripts/myfile.js'></script>

在你的html文件中。

并在myfile.js文件中(位于scripts文件夹中)

$(document).ready(function () {
   // your code
})

请注意myfile.js文件中没有<script>个标签。

另外,请记住您的代码正在使用jQuery,因此在您引用myfile.js文件后引用您的jQuery.js

e.g。

<script type='text/javascript' src='scripts/myfile.js'></script>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'></script>

另外,请将代码放在$(document).ready中。你的第二个代码在dom准备好之前执行,并且会抛出错误。

它应该是这样的(在你的myfile.js中)

$(document).ready(function () {
    $('#YearD').change(function () {
        var selectedYear = $(this).val();
        if (selectedYear != null && selectedYear != '') {
            $.getJSON('@Url.Action("Months")', { year: selectedYear }, function (months) {
                var monthsSelect = $('#Month');
                monthsSelect.empty();
                $.each(months, function (index, month) {
                    monthsSelect.append($('<option/>', {
                        value: month.value,
                        text: month.text
                    }));
                });
            });
        }
    });
    $('#Month').change(function () {
    var selectedMonth = $(this).val();
    if (selectedMonth != null && selectedMonth != '') {
        $.getJSON('@Url.Action("Days")', { month: selectedMonth }, function (days) {
            var daysSelect = $('#Day');
            daysSelect.empty();
            if (days == 0) {
                daysSelect.css("visibility", "hidden");
            }
            else {
                daysSelect.css("visibility", "visible");
            }
            $.each(days, function (index, day) {
                daysSelect.append($('<option/>', {
                    value: day.value,
                    text: day.text
                }));
            });
        });
        }
    });

});