2010-06-10 108 views
2

我已经在FF和MSIE中有完美的工作,但在Safari中无法正常工作。这是一个带有选项的表单,它通过来自MySQL DB的AJAX/jQuery进行更新。在Safari/Mac中需要关于jQuery/AJAX调用的帮助

在Safari中,当您选择第一个项目时,它会正确加载下一个选择菜单的选项;然而,当你选择其中的一个(在随后的选择菜单中加载新的选项)时,整个表单将重置并从该点开始打破。 有谁知道会导致此问题的Safari错误? 这里的JS:

$(document).ready(function(){ 
    $("#searchForm select").change(updateSearchForm); 
}); 
function updateSearchForm() { 
    $.ajax({ 
     url: '/elements/search_form.php?ajax=true', 
     data: $('#searchForm').serialize(), 
     error:function(xhr,err){ 
      alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status); 
      alert("responseText: "+xhr.responseText); 
     }, 
     success: function(data) { 
      $("#searchForm").html(data); 
      $("#searchForm select").change(updateSearchForm); 
     } 
    }); 
} 

我可以张贴相关的PHP/HTML的形式,但它是漫长的。 我是相对较新的JS,所以我不知道从哪里开始调试... TIA

+0

什么版本的Safari? Safari调试器对发生了什么有什么评论? – 2010-06-10 15:54:59

+0

在OS X上的Safari 4和5中发生。我试着在加载页面和选择表单中的选项时查看JS控制台和调试器输出,并且没有输出结果。虽然,对JS来说相当新,但我不确定要寻找什么! :-P – protohominid 2010-06-10 19:45:47

回答

1

可能是您通过替换HTML创建无效的表单。有些浏览器对此很挑剔。当然,我不知道,因为你没有发送整个代码,但你有没有尝试使用append()而不是html()修改表单?为了诊断的原因,也可以尝试追加一小部分。

1

一位朋友在阅读Gabor的帖子后想到了这一个......我需要使用“.replaceWith(data)”而不是“.html(data)”。很明显FF是为了弥补这一点,但Safari不是;每次ajax加载新的html,它将它嵌套到目标元素(#searchForm)中,因此嵌套了“form”标记,Safari不喜欢这样做。 感谢您的帮助,每个人!