【问题标题】:MVC Razor HTML helpers not rendered when $(document).ready($(document).ready(
【发布时间】:2012-10-17 08:29:41
【问题描述】:

我刚刚注意到,当我的 javascript 调用 $(document).ready(function.... 因此,当我将依赖于 DOM 对象的代码放入准备好的文档中时,它并没有找到 DOM 对象。

Javascript

$(document).ready(function () {
    $('input:radio,select').change(function () {
        DO STUFF...

HTML 助手

@Html.RadioButtonList(m => m.ItemType, new SelectList(Model.ItemTypes, "Name", "Name")

另一个

@Html.DropDownListFor(n => n.ApartmentFloor, new SelectList(Model.ApartmentFloors, "Id", "Floor"), new { @id = "floorsSelect", @class = "exists" })

通常,单选按钮和下拉菜单应该有一个 .change 函数,但由于在添加 .change 时它们还没有呈现,所以它们没有得到那个函数。

有没有办法让“准备好 html 助手”而不是“准备好文档”?

编辑

人们指出,HTML 助手在客户端开始渲染之前运行在服务器上,因此也应该在之前完成。情况似乎并非如此,因为当我“在文档就绪时”调试 JS 时,HTML 帮助器对象尚未呈现,但页面的其余部分已呈现。

所以问题仍然存在,有没有办法在 HTML 帮助器对象中添加“加载”功能,或者直接从具有剃刀语法的 cshtml 文件中添加“更改”功能?

【问题讨论】:

  • 你的问题没有多大意义,因为助手是在服务器上执行的(之前响应被发送到客户端并且javascript可以运行)
  • ..除非它是一个ajax加载的部分视图,并且脚本已经在页面中,是这样吗?
  • 嗯,你说的听起来很合乎逻辑。但是,当我在 doucment.ready 中时,我尝试搜索一个 DOM 对象,但没有找到。所以由于某种原因,DOM 还没有完全呈现出来......
  • 据我所知,它不是 Ajax 加载的局部视图。帮助程序位于一个 cshtml 文件中,然后由其 url 直接调用。
  • 也许我的 RadioButtonList 有问题?我正在使用这个:pastebin.com/hTzY9vP5

标签: javascript asp.net-mvc razor document-ready


【解决方案1】:

尝试像这样注册事件,

      $('input:radio,select').on("change" ,function () { }) ;

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我意识到我从未发布过解决问题的方法。 尽管人们指出应该在文档准备好之前渲染 HTML 助手,但对我来说似乎并非如此。 所以我所做的是直接在 HTML 帮助器上添加事件处理程序:

    @Html.RadioButtonList(m => m.MyObject, new SelectList(Model.MyObjects, "Name", "Name"), "inputChangeHandler($(this));")

    效果很好 =)

    【讨论】:

    • 另外,我注意到 JS 包含在 cshtml 文件中的位置改变了页面的行为。如果我将文档就绪 JS 放在 HTML 帮助器之上,则 HTML 帮助器不会在文档就绪时呈现。但是如果我把 JS 放在下面,它们就会被渲染......奇怪,我认为将 JS 放在文件的顶部或底部都没关系..
    猜你喜欢
    • 2014-04-20
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 2011-04-11
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多