【问题标题】:2 javascript functions clashing?2个javascript函数冲突?
【发布时间】:2011-04-13 10:42:42
【问题描述】:

我正在尝试在我的网站中实现一个 Javascript/PHP/AJAX 时钟,这样我就可以拥有一个可以在不同时区运行的简单时钟(教程在这里http://networking.mydesigntool.com/viewtopic.php?tid=373&id=31)

这本身工作正常,但我已经在页面上运行了一个 javascript 秒表,并且 2 似乎发生冲突,并且在秒表工作时时钟不会显示。

这是时钟的脚本:

<script type="text/javascript">
function loadTime ()
{
http_request = false;
if(window.XMLHttpRequest)
{
    // Mozilla, Safari,...
    http_request = new XMLHttpRequest();
    if(http_request.overrideMimeType)
    {
        // set type accordingly to anticipated content type
        //http_request.overrideMimeType('text/xml');
        http_request.overrideMimeType('text/html');
    }
}
else if(window.ActiveXObject)
{ // IE
    try
    {
        http_request = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e)
    {
        try
        {
            http_request = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e)
        {
        }
    }
    }

    var parameters = "time=";
    http_request.onreadystatechange = alertContents;
    http_request.open('POST', 'time.php', true);
    http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.setRequestHeader("Content-length", parameters.length);
    http_request.setRequestHeader("Connection", "close");
    http_request.send(parameters);
}


function alertContents()
{
    if (http_request.readyState == 4)
    {
        if (http_request.status == 200)
        {
            result = http_request.responseText;
            document.getElementById('clock').innerHTML = result;
        }
    }
}

</script>
<body onload="setInterval('loadTime()', 200);">

这是秒表的代码:

<script type="text/javascript">
    window.onload = function()
    {
        stopwatch('Start');
    }

    var sec = 0;
    var min = 0;
    var hour = 0;
    function stopwatch(text) {
        sec++;
        if (sec == 60) {
            sec = 0;
            min = min + 1;
        } else {
            min = min;
        }
        if (min == 60) {
            min = 0; 
            hour += 1;
        }

        if (sec<=9) { sec = "0" + sec; }
        document.clock.stwa.value = ((hour<=9) ? "0"+hour : hour) + " : " + ((min<=9) ? "0" + min : min) + " : " + sec;

        if (text == "Start") { document.clock.theButton.value = "Stop "; }
        if (text == "Stop ") { document.clock.theButton.value = "Start"; }

        if (document.clock.theButton.value == "Start") {
            window.clearTimeout(SD);
            return true;
        }
        SD=window.setTimeout("stopwatch();", 1000);
    }

    function resetIt() {
        sec = -1;
        min = 0;
        hour = 0;
        if (document.clock.theButton.value == "Stop ") {
            document.clock.theButton.value = "Start";
        }
        window.clearTimeout(SD);
    }
</script>

有人可以帮我让他们并肩工作吗?

感谢您的帮助

【问题讨论】:

    标签: php javascript ajax time clock


    【解决方案1】:

    首先,您要在 HTML 中声明 onload 事件处理程序:

    <body onload="setInterval('loadTime()', 200);">
    

    因此被脚本覆盖:

    window.onload = function()
    {
        stopwatch('Start');
    }
    

    这意味着原始的onload 调用永远不会执行。

    您应该尝试使用addEventListener,这样您就可以为同一个事件添加多个事件处理程序。

    还有几点:

    • 不要将字符串传递给setInterval和setTimeout,只传递函数本身。更高效、更不容易出错:setInterval(loadTime, 200);
    • 不要编写所有 JS 代码来使用不同的浏览器,而是使用 jQuery、mootools 或无数其他框架之一。它们使在所有浏览器上正确使用它变得容易得多。

    【讨论】:

    • 嗨 Martijn,感谢您的帮助。不幸的是,我不太了解 Javascript,只有最基本的和这些脚本是从互联网上获取的。我在另一个网站上发布了同样的问题,有人指出了你遇到的同样的问题,并提供了代码来解决它,所以它现在可以工作了:)再次感谢!
    • 您好,用户,在这种情况下,我建议先从一些好的 JS 教程开始——从长远来看,这确实是值得的。 Javascript 非常灵活和强大,但它也很容易把事情搞砸。
    • 嗨,Martijn,会的。我买了一本关于 Javascript/Ajax 的书,但它所经历的事情并不真正适用于我在现实世界中使用的那种东西。你能推荐一些好的入门教程吗?谢谢
    • 我发现Javascript: The Good Parts 确实让我大开眼界(该页面还包含指向实际书籍的链接)。不过,它可能有点先进。另请参阅stackoverflow.com/tags/javascript/info 提供的链接。最后,一旦您熟悉了基本概念,我推荐 Mark Pilgrim 的 diveintohtml5.org 了解网络浏览器的一些最新和最强大的功能。
    【解决方案2】:

    试试这个: 看到微妙的 '+=' 而不是 '=' !

    window.onload += function()
    {
        stopwatch('Start');
    }
    

    【讨论】:

    • 嗨刘易斯感谢您的回复。我尝试更改您发布的行以及 行以具有 id firstClock,但不幸的是问题仍然存在。你还有其他建议吗?谢谢
    • 我意识到您没有添加到 onload 事件中 - 以下帖子中的人指出了这一点!
    • 谢谢刘易斯,在 Martijn 和另一个网站的帮助下,我现在已经整理好了 :)
    猜你喜欢
    • 1970-01-01
    • 2015-09-01
    • 2012-09-15
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    相关资源
    最近更新 更多