Jquery document.ready没有警报就没有触发

时间:2014-08-21 04:38:58

标签: javascript jquery alert document-ready

我面临这个非常奇怪的问题,即我的文档就绪函数没有被触发,除非我在函数之后添加alert。当我使用alert进行调试时,我发现了这一点,显然一切正常。但当我删除alert时,函数'RaiseEvent'永远不会被调用。

这是我的HTML:

<script src="../Content/jquery.mobile-1.4.2/js/jquery.js"></script>
<script src="../Content/jquery.mobile-1.4.2/js/jquery.mobile-1.4.2.min.js"></script>
<script type="text/javascript" src="Scripts/hybrid.js"></script>
<script>
$(document).ready(function(){
            //populate form
            //alert('Calling POPULATE-FORM');
            RaiseEvent('POPULATE-FORM');
            //alert('After POPULATE-FORM');
});
</script>

从hybrid.js中检索RaiseEvent function

function RaiseEvent(eventName)
{
    if (!eventName) eventName = '';
    var qs = '';
    var elms = document.getElementsByTagName('*');
    for (var i = 0; i < elms.length; i++) {
        if (elms[i].name) {
            qs += (qs.length > 0 ? '&' : '') + encodeURIComponent(elms[i].name) + '=' + encodeURIComponent(elms[i].value);
        }
        if (elms[i].type == 'checkbox' && elms[i].checked)
            qs += (qs.length > 0 ? '&' : '') +
            'checked:' + encodeURIComponent(elms[i].name) + '=1';
    }
    location.href = 'xpostback:' + eventName + ':' + qs;
}

我已经搜索了这个问题,发现很少有人也面临这个问题Here但是我已经按照他的解决方案无效了。

任何人都面临同样的问题,或者有什么建议/意见可能会出错?

2 个答案:

答案 0 :(得分:1)

我对你的问题有一些想法。

a)ready()

中的回调函数

来自文档handler是回调函数,这意味着当DOM元素准备就绪时,您的函数将被调用。我想这不是问题。

document.ready( handler );

b)Jquery.mobile

快速谷歌搜索告诉我你可以使用不同的功能。请参阅pagecreated文档。

 $(document).on('pagecreated',function(){ 
                RaiseEvent('POPULATE-FORM');
            });

另见:

  1. jQuery mobile $(document).ready equivalent
  2. jQuery Mobile: document ready vs page events
  3. c)函数RaiseEvent(eventName)

    出错

    即使您的功能与alert一起使用,也不能保证您的功能正常运行。我有很多情况,在所有现代浏览器中我的代码都有效,但是有一些错误。只有Internet Explorer非常善良并且让我犯错误。我建议用JS调试器运行你的代码。

    摘要

    我会从b)开始,然后尝试查看c)。祝你好运:)

答案 1 :(得分:0)

显然,hybrid.js中还有另一个“document.ready”函数导致RaiseEvent调用不一致。可能是因为Javascript的异步性质,RaiseEvent('POPULATE-FORM')与hybrid.js中的RaiseEvent('DOCUMENT-READY')重叠:

var readyStateCheckInterval = setInterval(function() {
    if (document.readyState === "complete") {
        RaiseEvent("DOCUMENT_READY");
        Init();
        clearInterval(readyStateCheckInterval);
    }
}, 50);

致@Barmar帮我调试isssue!