Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery document.ready未在没有警报的情况下触发_Javascript_Jquery_Alert_Document Ready - Fatal编程技术网

Javascript Jquery document.ready未在没有警报的情况下触发

Javascript Jquery document.ready未在没有警报的情况下触发,javascript,jquery,alert,document-ready,Javascript,Jquery,Alert,Document Ready,我面临着一个非常奇怪的问题,即我在document ready中的函数没有被触发,除非我在函数后面加上alert。我在使用警报进行调试时发现了这一点,显然一切正常。但是当我删除警报时,,函数“RaiseEvent”从未被调用 这是我的HTML: <script src="../Content/jquery.mobile-1.4.2/js/jquery.js"></script> <script src="../Content/jquery.mobile-1.4.2/

我面临着一个非常奇怪的问题,即我在document ready中的函数没有被触发,除非我在函数后面加上
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>
我在谷歌上搜索了这个问题,发现很少有人也面临这个问题,但我遵循他的解决方案已经没有用了


有没有人面临同样的问题,或者有什么建议/建议可能会出什么问题?

我对你的问题有一些想法

a) ready()中的回调函数 从文档
中,handler
是回调函数,这意味着当DOM元素就绪时,将调用您的函数。我想这不是问题所在

document.ready( handler );
b) Jquery.mobile 快速的谷歌搜索告诉我你可以使用不同的功能。见文件

 $(document).on('pagecreated',function(){ 
                RaiseEvent('POPULATE-FORM');
            });
请看这里:

  • c) 函数RaiseEvent(eventName)中出错 即使您的函数与
    警报一起工作
    也不能保证您的函数正常工作。在很多情况下,在所有现代浏览器中,我的代码都能正常工作,但存在一些bug。只有
    internetexplorer
    这么好,给我出了错。我建议使用JS调试器运行代码

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

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

    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;
    }
    
    var readyStateCheckInterval = setInterval(function() {
        if (document.readyState === "complete") {
            RaiseEvent("DOCUMENT_READY");
            Init();
            clearInterval(readyStateCheckInterval);
        }
    }, 50);
    

    感谢@Barmar帮助我调试ISSUE

    RaiseEvent
    做什么?可能有一些异步行为,它与
    alert
    一起“工作”,因为
    alert
    被阻塞。所有jquery文件和javascript都在同一个位置?什么是
    RaiseEvent
    以及您如何检查它是否被调用可能会发生,因为javascript是异步的。但在这里,它必须与您的总体代码结构有关,包括导入。@cracker是的,它们是