javascript - 两个 jQuery/JavaScript 函数未被调用

标签 javascript jquery asp.net-mvc

我有一个可用的 MVC 应用程序,其中包含两个列表框和用于列表中各种内容的按钮。以下脚本中的所有 jQuery 函数都正确执行,除了从未被调用的 MoveUp 和 MoveDown 之外(设置断点)。 F12 控制台很干净,没有 JavaScript 错误。有问题的两个按钮是:

  <button type="button" id="up" onclick="MoveUp()">Up</button>

    <button type="button" id="down" onclick="MoveDown()">Down</button>

jQuery代码如下。 MoveUp 和 MoveDown 函数是否需要位于“全局”函数内部?

<script src="~/Scripts/jquery-2.1.1.js"></script>   
    <script>
        $(function () {
            $("#add").click(function () {
                $("#listBoxAvail > option:selected").each(function () {
                    $(this).remove();
                    val = $(this).val();
                    temp = $(this);
                    temp.val('L' + val)
                    $(temp).appendTo("#listBoxSel");
                });
            });

            $("#remove").click(function () {
                $("#listBoxSel > option:selected").each(function () {
                    $(this).remove().appendTo("#listBoxAvail");
                });
            });

            $("#remove-all").on("click", function(event) {
                $('#listBoxSel option').prop('selected', true);
                $("#remove").trigger("click");
            });

            $("#select-all").on("click", function(event) {
                $('#listBoxAvail  option').prop('selected', true);
                $("#add").trigger("click");
            });
        });

        function MoveDown() {

            var selectedOption = $('#listBoxSel > option[selected]');

            var nextOption = $('#lstBoxSel > option[selected]').next("option");

            if ($(nextOption).text() != "") {

                $(selectedOption).remove();

                $(nextOption).after($(selectedOption));

            }

        }

        function MoveUp() {

            var selectedOption = $('#lstBoxSel > option[selected]');

            var prevOption = $('#lstBoxSel > option[selected]').prev("option");

            if ($(prevOption).text() != "") {

                $(selectedOption).remove();

                $(prevOption).before($(selectedOption));

            }

最佳答案

您是说“MoveUp 和 MoveDown 从未被调用”,但是“控制台是干净的并且没有 JavaScript 错误。” 这确实意味着该函数正在被调用,否则,您会看到错误undefined is not a function

因此,根据这些信息,我们可以猜测错误出在您的函数中。由于您使用 jQuery,当 jQuery 对象为空时,它会默默地失败(没有错误)。

我无权访问您的 HTML,所以我只是在这里猜测,但您正在使用 select 元素并使用此选择器 option[selected]。您可能正在尝试获取选定的元素,但这并没有达到您想要的效果。它选择具有selected 属性的选项。您的 HTML 可能没有它。

您要使用的是 :selected :它将获取选定的选项。使用它:

function MoveDown() {

    var selectedOption = $('#listBoxSel > option:selected');
    var nextOption = selectedOption.next("option");

    if ($(nextOption).text() != "") {

        $(selectedOption).remove();

        $(nextOption).after($(selectedOption));

    }

}

关于javascript - 两个 jQuery/JavaScript 函数未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26612628/

相关文章:

javascript - 使用 html 和 php 的动态下拉列表

javascript -/bin/sh : node: command not found - in VScode, 运行 Javascript

javascript - 如何使用 Flask 和 jquery 解决这个问题? HTTP400 : BAD REQUEST - The request could not be processed by the server due to invalid syntax

asp.net-mvc - 如何在MVC 4 API中漂亮地打印JSON脚本

asp.net - ViewData、ViewBag 和 TempData 有什么区别?

javascript - document.ready() 的 jQuery 异常 - 对象不支持此属性或方法

javascript - 无法在 TestComplete 中使用 EvaluateXPath 方法找到 TD 的 DIV

jquery - 如何垂直居中一行以上的文本(仅适用于 chrome)?

php - 使用 $.each 迭代 PHP 数组

asp.net - 在 ASP.NET 中读取分块传输编码的 http 请求的正文