当前位置: 首页 > 面试题库 >

在jquery table.load()html元素变为未定义之后

傅皓君
2023-03-14
问题内容

我正在重写帖子以使其更清晰

我有一个具有以下操作的HomeController

public ActionResult About()
    {
        MapDetailsRepository repMapDetail = new MapDetailsRepository("name=ge");
        YearRepository repYear = new YearRepository("name=ge");


        SuperMapModel smM = new SuperMapModel();
        smM.saVM = new StudentAssessmentViewModel();

        MapDetailResultSet mapDetailResultSet = repMapDetail.GetMapDetails(53);

        smM.saVM.mapDetails = mapDetailResultSet.mapDetails.ToList();
        smM.saVM.results = mapDetailResultSet.results.ToList();
        smM.saVM.students = mapDetailResultSet.students.ToList();

        smM.scM = new SearchControlViewModel();
        smM.scM.YearList = new SelectList(repYear.GetAll(), "yearID", "year");


        return View(smM);        }

public ActionResult DisplaySearchResults(string searchText) {
         MapDetailsRepository repMapDetail = new MapDetailsRepository("name=ge");
         SuperMapModel smM = new SuperMapModel();
        smM.saVM = new StudentAssessmentViewModel();

        MapDetailResultSet mapDetailResultSet = repMapDetail.GetMapDetails(22);

        smM.saVM.mapDetails = mapDetailResultSet.mapDetails.ToList();
        smM.saVM.results = mapDetailResultSet.results.ToList();
        smM.saVM.students = mapDetailResultSet.students.ToList();

        return PartialView("~/Views/Maps/_MapDetailsList.cshtml", smM.saVM);
}

SuperMapModel是具有2个视图模型的超类-scM用于搜索面板部分控制-saVM用于MapDetailList部分控制

在页面上加载SuperMapModel传递给View,该View将各自的模型传递给每个部分控件

<div>
@Html.Partial("_SearchPanel", Model.scM)
</div>
<div class="row">
<div class="col-md-12 table-responsive" >
        @Html.Partial("~/Views/Maps/_MapDetailsList.cshtml", Model.saVM)

</div>

我的MapDetails部分控制非常复杂,因此我提供了一个简化的版本

<table>
    <thead>
        <tr><th/><th/><th/></tr>
        <tr><th/><th/><th/></tr>
    </thead>
    <tbody>
      @foreach(ShortStudent geStudent in Model.students)
     {  
        <tr>
           <td>@geStudent.firstname</td>
           foreach (run it x number of times)
            {
               <td>
                   @foreach (ShortResult geResult in Model.results)
                   {
                   if (geResult.ResultValue != null)
                                {

                                    <script>{ setResultValue(@colIndex, @rowIndex, '@geResult.ResultValue'); }</script>
                                }
                      }
               </td>
           }
       </tr>
      }
    </tbody>
</table>

setResultValue函数在主视图(关于)上定义,它设置当前td的innerhtml

function setResultValue(colIndex, rowIndex, resultValue) {
    alert("inside about");
    var cell = $("#MapDetails").children().children()[rowIndex].children[colIndex];
    cell.innerHTML = resultValue;

}

PS此网格将转换为document.ready上的剑道网格。

现在,它可以完美地在页面加载中工作,但是当我从searchpanel内部单击搜索按钮时,我会执行以下操作(在searchpanel部分控件上定义)

function refreshGrid() {
    alert("search panel");
    var url = '@Url.Action("DisplaySearchResults", "Home")';
    $("#MapDetails").load(url, { searchText: "Lee" }, function () {
        alert("success");
    });

}

PS这里的回叫从不触发

所以现在我只将部分视图与 DisplaySearchResults中* 的新数据绑定 *

现在很明显,它在主页上找不到脚本函数setResultValue,因此我在局部视图mapdetailslist上复制了相同的脚本函数setResultValue(这当然是一种不好的做法)

更新

调试后,我得到了更多详细信息,所以现在页面加载时出现了新问题,我可以得到$(“#MapDetails”)。children()。children()[rowIndex],但单击按钮后未定义


问题答案:

所以问题是我无法使用以下代码获取td元素

$("#MapDetails").children().children()[rowIndex]

我已经以一种非常笨拙的方式解决了它,但是很想拥有一个更整洁的解决方案

function setResultValue(colIndex, rowIndex, resultValue) {

if ($("#MapDetails").children().children()[rowIndex] != undefined) {
    var cell = $("#MapDetails").children().children()[rowIndex].children[colIndex];
    cell.innerHTML = resultValue;
}
else {
    var newRow = 0, newCol = 0, assessmentLength = 5, elementPos = 0;
    newRow = rowIndex - 3;
    newCol = colIndex - 4;

    elementPos = (newRow * assessmentLength) + newCol;
    $(".test").get(elementPos).innerHTML = resultValue;

}
}

您可以在标记中看到.test是我的td的类

我的问题是仍然存在部分视图渲染时加载脚本元素和dom元素的顺序



 类似资料:
  • 我必须将第三方元素集成到我的Angular(4.3.x)应用程序中。它们看起来像这样: 我已经通过添加角无错误 和 但我一点都不显示。任何想法如何马

  • 问题内容: 在jQuery的核心风格指南建议两种不同的方法来检查一个变量是否被定义。 全局变量: 局部变量: 特性: 为什么jQuery为什么对全局变量使用一种方法而对局部变量和属性使用另一种方法? 问题答案: 对于未声明的变量,将返回字符串文字,而身份检查将触发错误 “未定义foo” 。 对于局部变量(您 知道 已在某处声明),不会发生此类错误,因此进行身份检查。

  • 我正在使用jsoup应用程序并尝试获取网页的url。我有网页网址。我试图通过url解析只获取图像url,但是当向url发送请求时,我得到了这个错误“构造函数url(元素)是未定义的” 我的问题是如何传递我从jsoup库获得的URL这里是我的代码'public static void main(string[]args)throwsIOException{ ‘并使用 并将该信息传递到url解析函数中

  • 问题内容: 我有以下HTML结构: 我只想选择之前的内容。我怎样才能做到这一点?在我的内容中,越来越多的东西,因此解决方案应该是通用的。 问题答案: 据我所知,CSS没有提供将 在* 选择器 之前定位的任何选择器。您能否将其选择为()之后的? * 如您所见,这可能是您依赖CSS时可以使用的最佳选择器,尽管您可以轻松地向之前的每个类添加一个类。这样可以避免您在另一个段落和段落节之前有一个段落节的情况

  • 主要内容:HTML 元素,HTML 元素语法,嵌套的 HTML 元素,HTML 文档实例,HTML 实例解析,不要忘记结束标签,HTML 空元素,HTML 提示:使用小写标签HTML 文档由 HTML 元素定义。 HTML 元素 开始标签 * 元素内容 结束标签 * <p> 这是一个段落 </p> <a href="default.htm"> 这是一个链接 </a> <br> 换行   *开始标签常被称为起始标签(opening tag),结束标签常称为闭合标签(closing tag)。 HT

  • HTML 文档由 HTML 元素定义。 HTML 元素 开始标签 * 元素内容 结束标签 * <p> 这是一个段落 </p> <a href="default.htm"> 这是一个链接 </a> <br> 开始标签常被称为起始标签(opening tag) 结束标签常称为闭合标签(closing tag)。 HTML 元素语法 HTML 元素以开始标签起始 HTML 元素以结束标签终止 元素的内容