【问题标题】:jquery Select - replace with is not available for selectjquery Select - 替换为不适用于选择
【发布时间】:2015-01-25 06:44:30
【问题描述】:

环境/技术:Cshtml / Razor、ajax、jQuery、SQL Server 2008

我为我的 cshtml 网络应用实现了一个简单的搜索,如下所示:

  1. 用于输入搜索的输入文本框
  2. jQuery 调用 ajax 方法来请求适当的方法在 SQL 中进行搜索
  3. 当我收到响应时,我将其加载到现有的“选择”标签上,如下所示:

    success: function (response) {
    $("select#searchres").replaceWith(response);                        
    } 
    

    这意味着我将现有的选择替换为输出;我的典型反应如下图所示:

    <select id="searchres">
    <option value=""></option>
    @foreach (var result in searchresults)
    {
        <option value="@result[0]">@result[2] @result[3] @result[4]</option>
    }
    </select>
    
  4. 输出:结果按预期加载到选择中;但是,当我选择加载到下拉列表中的值时,我的请求不会返回任何内容;就好像我加载的内容不存在一样。此外,用于捕获所选值并执行操作的 jquery 方法不会被触发。

  5. 进一步的步骤:我查看了页面源代码,你瞧,发现下拉/选择仍然显示,好像它包含原始内容。

问题:我该如何解决这个问题?如何让页面识别我的“新”标签及其内容并对交互做出适当响应?

【问题讨论】:

    标签: jquery .net ajax razor model-view-controller


    【解决方案1】:

    如果你使用 asp.net MVC Asp.net MVC ModelState.Clear.

    ModelState.Clear();
    //before returning your select
    

    另外,当你动态重写 html 时,你必须重新绑定事件。因此,如果您的选择有单击或更改事件,请在附加 html 后重新绑定它们。

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      进行以下更改。覆盖select 会删除所有附加的事件处理程序。使用 .html() 而不是 .replaceWith() 以保留原始 select 元素及其事件处理程序。

      success: function (response) {
          $("#searchres").html( response );                        
      } 
      

      删除&lt;select ...&gt;&lt;/select&gt;

      <option value=""></option>
      @foreach (var result in searchresults)
      {
          <option value="@result[0]">@result[2] @result[3] @result[4]</option>
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-18
        • 1970-01-01
        • 2013-11-09
        • 2017-06-10
        • 2018-03-11
        • 1970-01-01
        • 1970-01-01
        • 2012-07-19
        相关资源
        最近更新 更多