【问题标题】:jQuery show based on checkbox value at page load页面加载时基于复选框值的 jQuery 显示
【发布时间】:2011-02-22 12:53:08
【问题描述】:

我有一个 ASP MVC Web 应用程序,其中一个页面上有一组主复选框,下面有子复选框。子复选框应仅在选中相应的主复选框时显示。只要页面加载时没有选中任何复选框,我的以下代码就可以正常工作。

$("input[id$=Suffix]").change(function() {

        prefix = this.id;

        if (!$(this).hasClass("checked")) {
            $("tr[id^=" + prefix + "]").show();
            $(this).addClass("checked");
        }
        else {
            $("tr[id^=" + prefix + "]").hide();
            $(this).removeClass("checked");
        }
    });

现在我需要检查数据库中主要复选框的值。我得到了这些值,并且可以选中页面加载时的复选框。但是当页面出现时,当主复选框被选中时,子复选框不显示。

另外,如果页面加载时主checkbox被选中,子checkbox只有在主chcekbox未选中时才会显示(显然是因为上面的函数只作用于.change())。

你们都建议我尝试什么?如果您需要进一步的解释,请随时询问。

编辑:顺便说一句,所有这些都在 $(document).ready() 中

【问题讨论】:

  • 您如何从数据库中获取选中的值并设置主要复选框? AJAX 调用和 dom?还是 asp 脚本?
  • 我只是使用模型(LINQ to SQL)检查数据库,然后从我的控制器设置 ViewData。
  • 既然你有关于“父”复选框是否在服务器端被选中的信息(在渲染时),为什么不在适当的地方渲染“子复选框”(可见或hidden) 状态而不是尝试在客户端触发它们?
  • 嘿 R0MAN,你会怎么做?

标签: jquery asp.net-mvc checkbox


【解决方案1】:

您的函数仅在更改时被调用,因此最初不会触发。您需要在页面加载时也运行的东西来检查任何选中的复选框并显示子项。

这是我的意思的一个示例 - 不仅添加更改事件,还可以在页面加载时为每个事件调用更新。这段代码可能不准确,我现在没有时间测试它,但它应该可以理解总体思路。我是 MooTools 人,如果 jQuery 不完全正确,请原谅我。

$(document).ready(function(){

  $("input[id$=Suffix]").each(function(el){
    el.change(function(){ updateCheckbox(this); });
    updateCheckbox(el);
  });

});

function updateCheckbox(chk){
        prefix = chk.id;

        if (!$(chk).hasClass("checked")) {
            $("tr[id^=" + prefix + "]").show();
            $(chk).addClass("checked");
        }
        else {
            $("tr[id^=" + prefix + "]").hide();
            $(chk).removeClass("checked");
        }
}

【讨论】:

  • 这看起来很不错,但它根本不起作用。我会继续搞砸它,看看我能得到什么。如果我找到解决方案,将发布。仅供参考,我收到一条错误消息,提示 el.change() 不是函数。
  • 在多玩了一些并重新安排了一点之后,我得到了它的工作。如果有人想要最终代码,请告诉我。
  • 抱歉,就像我说我的 jQuery 语法不是最好的一样。在您的初始帖子中发布工作代码,我会更新我的。很高兴听到您成功了!
猜你喜欢
  • 2018-04-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 2011-02-05
相关资源
最近更新 更多