动态更新div元素的内容需要两到三次尝试

时间:2011-08-05 16:22:34

标签: javascript jquery jquery-mobile

我正在尝试更新div的内容,但它并不总是有效。我不确定它是否与我的问题有关,但我使用的是jquery mobile。

背景:

我有一个选择菜单,用于选择位置。我还有一个按钮,用于获取有关所选位置的信息。 Ajax用于获取数据,该数据显示在我页面上的div元素中。我发现我需要单击两次按钮才能更新div元素。奇怪的是,如果我在更新div之前添加一个警报,它就可以正常工作(即我只需按一下按钮)。

代码:

$( function() {
  $("#weather_submit").click(function(){
    $.mobile.pageLoading();
    var formData = $("#getWeatherForm").serialize();
    $.ajax({
      type: "POST",
      url: "weather.php",
      cache: false,
      data: formData,
      success: onSuccessWeather,
      error: onError
    });
    return false;
  });
});

function onError(data, status) {
  $.mobile.pageLoading( true );
  alert('error');
}

function onSuccessWeather(data, status) {
  $.mobile.pageLoading( true );
  //alert(data);  // if I use this line of code I never have a problem (i.e. the weatherSummary div updates appropriately
  data = $.trim(data);
  $("#weatherSummary").html(data);
}

我最初使用我的Android EVO发现了这个问题,但我刚尝试使用firefox,它也会发生。

我怀疑这与.html()因某些原因无法正常工作有关。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试:

$("#page_id_name").page();

但我认为Beta 2更新中还有一种新方法:

  

新的“创建”事件:一次轻松增强所有小部件

     

虽然页面插件不再专门调用每个插件,但它   会发送一个“pagecreate”事件,大多数小部件都会使用它   自动初始化自己。只要一个小部件插件脚本   引用后,它将自动增强小部件的任何实例   它在页面上找到,就像之前一样。例如,如果选择菜单   插件被加载,它将增强它在新内容中找到的任何选择   创建页面。

     

现在,这个结构允许我们添加一个新的创建事件   触发任何元素,为您节省手动初始化的任务   该元素中包含的每个插件。到现在为止,如果是开发人员   通过Ajax或动态生成的标记加载到内容中   需要手动初始化所​​有包含的插件(listview按钮,   选择等)以增强标记中的小部件。

     

现在,我们方便的创建事件将初始化所有必要的插件   在该标记内,就像页面创建增强一样   过程有效。如果您要使用Ajax加载HTML块   标记(例如登录表单),您可以自动触发创建   转换它包含的所有小部件(输入和按钮)   case)进入增强版本。此方案的代码为:

$( ...new markup that contains widgets... ).appendTo( ".ui-page" ).trigger( "create" );

因此,如果你更新到Beta 2尝试这样的事情(未经测试):

$("#weatherSummary").html(data).trigger( "create" );