-1

好的,所以我有一个页面,其中包含一些元素和一些具有 display:none 的 textarea

根据选择元素的值,相应的文本区域通过设置的 onchange 事件变为可见$('#comment').show()

该页面是一个带有一些验证的表单,如果用户按下提交并且验证没有通过,表单将重新显示相同的数据和一些错误消息。

现在我遇到的问题是,尽管所有数据都显示,但评论框不存在。我在我的 javascript 中添加了一些警报以查看发生了什么,我看到在我的 $(document).ready(function () 的末尾,评论文本区域正在工作并且显示正常,但之后 ajax 似乎正在重新显示整个页面和评论区域再次隐藏。

  $(document).ready(function () {

      if ($('#Scope').val() == "Yellow" || $('#Scope').val() == "Red") {
          showComments("ScopeComment");
      }

      if ($('#Schedule').val() == ("Yellow") || $('#Schedule').val() == "Red") {
          showComments("ScheduleComment");
      }

      if ($('#Financial').val() == "Yellow" || $('#Financial').val() == "Red") {
          showComments("FinancialComment");
      }

      if ($('#Resource').val() == "Yellow" || $('#Resource').val() == "Red") {
          showComments("ResourceComment");
      }

      if ($('#Risk').val() == "Yellow" || $('#Risk').val() == "Red") {
          showComments("RiskComment");
      }

      alert("hello"); -------> At this point I see the alert and behind it all correct text areas are shows, but right after I press "OK" Ajax re-displays the page and my comments all hide
  });

  function showComments(textID) {
      $('#' + textID).show();
  }

Ajax 是否有它自己的“就绪”函数,它在 jq 移动就绪函数之后调用?或者这里发生了什么

4

1 回答 1

0

我不确定这些场景中的哪一个更适合你的情况,所以我会给你两个。

A. 您正在进行 ajax 调用并手动返回和更新数据

在这种情况下,您需要在将数据放置到位后,在 ajax 回调期间对 document.ready 进行相同的调用。document.ready 事件仅在您第一次加载页面时调用,后续更新这些字段的 ajax 请求甚至不会触发。他们有自己的事件,例如completesuccess

B. 整个页面正在从服务器返回。

JQuery Mobile 不会加载一个全新的页面,而是进行 ajax 调用来获取页面的内容并将其插入到 DOM 中。这意味着 document.ready 函数只会在您第一次导航到该网站时被调用。您想要的是绑定到 pageshow 事件。前任。

  $('#FormPage').live('pageshow', function () {

      if ($('#Scope').val() == "Yellow" || $('#Scope').val() == "Red") {
          showComments("ScopeComment");
      }

      if ($('#Schedule').val() == ("Yellow") || $('#Schedule').val() == "Red") {
          showComments("ScheduleComment");
      }

      if ($('#Financial').val() == "Yellow" || $('#Financial').val() == "Red") {
          showComments("FinancialComment");
      }

      if ($('#Resource').val() == "Yellow" || $('#Resource').val() == "Red") {
          showComments("ResourceComment");
      }

      if ($('#Risk').val() == "Yellow" || $('#Risk').val() == "Red") {
          showComments("RiskComment");
      }

      alert("hello"); -------> At this point I see the alert and behind it all correct text areas are shows, but right after I press "OK" Ajax re-displays the page and my comments all hide
 });
于 2012-09-18T17:51:56.933 回答