代码之家  ›  专栏  ›  技术社区  ›  Andre Gallo

当表单回发时,客户端元素不会得到更新

  •  0
  • Andre Gallo  · 技术社区  · 16 年前

    我有一个web表单,其中包含许多操作DOM的javascript功能。 这是通过使用Ajax来调用一个服务来实现的,该服务将返回我必须做的任何事情,例如隐藏元素、层叠下拉列表、删除和向select中插入新项等。

    除了一个特定的功能外,一切都按预期工作。此函数仅根据我的Ajax调用返回的内容禁用并设置select元素中的默认值。例如,假设我从以下选择中选择了“foo”,并保存了记录:

    <select id="mySelect2">
      <option value="0">Default</option>
      <option value="foo">Foo</option>
      <option value="another_foo">Foo 2</option>
    </select>
    

    伟大的!现在我已经更改了Web表单中触发Ajax调用的其他元素。返回的数据告诉我应该选择默认值并禁用select元素。这个很好用。但是,当我再次保存记录并在数据库中验证它时,在这种情况下默认值0不会被保存。记录保留在上一个选定项(“foo”)中。

    如果您好奇,我将使用以下代码来完成此操作:

    1. 绑定Ajax调用

      $('myElement').change(GetData);
      
    2. GETDATA方法

      $.ajax({
          type: 'POST',
          url: 'myUrl',
          data: "{'id':'" + myIdFromMyElement + "'"}",
          contentType: 'application/json; charset=utf-8',
          dataType: 'json',
          success: OnSuccess,
          error: OnError
      });
      
    3. 根据返回的数据操作select元素:

      function OnSuccess(data, textStatus) { 
          if (data.d.DisableMySelect2){
              $('#mySelect2').val('0');
              $('#mySelect2').attr('disabled', 'disabled');
          }
      }
      

    为什么会这样?

    编辑:

    进一步的调查显示,我的web表单没有正确地解除绑定更改的值,但当我离开时 Request.Form["mySelect2"] 我实际上可以看到更新后的值,所以很明显客户机方面没有任何问题。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Christian C. Salvadó    16 年前

    我认为这是因为 disabled 没有与表单一起提交。

    您可能希望通过Ajax调用处理表单提交,或者使用隐藏的输入来存储禁用的select元素的所选选项的值。

    推荐文章