0

これらの2つのJavaScriptが同じページで一緒に連携しない理由を誰かに教えてもらえますか?

スクリプト#1

これは頭​​の中にあります:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script type="text/javascript">
//<![CDATA[
<!--
var tWidth='600px';                  // width (in pixels)
var tHeight='18px';                  // height (in pixels)
var moStop=true;                     // pause on mouseover (true or false)
var fontfamily = 'arial,sans-serif'; // font for content
var tSpeed=7;                        // scroll speed (1 = slow, 5 = fast)

// enter your ticker content here (use \/ and \' in place of / and ' respectively)
var content='<a href="http:\/\/www.url.com\/">7679 - Reset Passwords<\/a>, ';


var cps=tSpeed; var aw, mq; var fsz = parseInt(tHeight) - 4; function startticker(){if (document.getElementById) {var tick = '<div style="position:relative;width:'+tWidth+';height:'+tHeight+';overflow:hidden;"'; if (moStop) tick += ' onmouseover="cps=0" onmouseout="cps=tSpeed"'; tick +='><div id="mq" style="position:absolute;left:0px;top:0px;font-family:'+fontfamily+';font-size:'+fsz+'px;white-space:nowrap;"><\/div><\/div>'; document.getElementById('ticker').innerHTML = tick; mq = document.getElementById("mq"); mq.style.left=(parseInt(tWidth)+10)+"px"; mq.innerHTML='<span id="tx">'+content+'<\/span>'; aw = document.getElementById("tx").offsetWidth; lefttime=setInterval("scrollticker()",50);}} function scrollticker(){mq.style.left = (parseInt(mq.style.left)>(-10 - aw)) ?parseInt(mq.style.left)-cps+"px" : parseInt(tWidth)+10+"px";} window.onload=startticker;
//-->
//]]>
</script>

これは、スクリプト#1の本文に入ります。

<div id="ticker" align="center">
</div>

上記のスクリプトは、画面全体にテキストRTOL(右から左)をマーキーします(マーキー)。マウスオーバー時にマーキーを停止します。便利な小さなスクリプトですが、問題は、ページに次のスクリプトを実装すると壊れることです...

スクリプト#2

これは頭​​の中にあります:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script type="text/javascript">
//<![CDATA[
<!--

function show2(){
if (!document.all&&!document.getElementById)
return
thelement=document.getElementById? document.getElementById("tick"): document.all.tick
var Digital=new Date()
var hours=Digital.getHours()
var minutes=Digital.getMinutes()
var seconds=Digital.getSeconds()
var dn="PM"
if (hours<12)
dn="AM"
if (hours>12)
hours=hours-12
if (hours==0)
hours=12
if (minutes<=9)
minutes="0"+minutes
if (seconds<=9)
seconds="0"+seconds
var ctime=hours+":"+minutes+":"+seconds+" "+dn
thelement.innerHTML=""+ctime+""
setTimeout("show2()",1000)
}
window.onload=show2
//-->
//]]>
</script>

これは、スクリプト#2の本文に含まれています。

<span id="tick"></span>

上記のスクリプトは、現在のマシン時間を時計として表示し、時間、分、秒をカウントします。このスクリプトをページに追加すると、上記のスクリプト#1(マーキー)がページから消えます。助言がありますか?

4

2 に答える 2

3

両方のスクリプトがを使用してwindow.onload = somethingいるため、2番目のスクリプトが最初のスクリプトの初期化を妨げています。

最初の例では、window.onloadを削除し、2番目の例を次のように変更します。

function loadBothScripts()
{
    startticker();
    show2();
}

window.onload = loadBothScripts;
于 2012-06-29T15:06:29.727 に答える
1

最初のスクリプトに次の行があります。

window.onload = startticker;

そして、2番目のスクリプトにこれがあります。

window.onload = show2;

2番目のスクリプトはwindow.onloadイベントを上書きして、最初のスクリプトが起動しないようにします。この関数を使用して、複数のハンドラーを1つのイベントにアタッチできます。

// addEventListener fix for IE
// o: object to which event listener is assigned
// e: event name as string
// f: the function
function myAddEventListener(o, e, f) {
    if (o.addEventListener) { // standards compliant browsers
        o.addEventListener(e, f, false);
    } else if (o.attachEvent) { // IE8 and earlier
        o.attachEvent("on" + e, f);
    }
}

// replace all window.load = someFunction statements with this:
myAddEventListener(window, "load", startticker);
myAddEventListener(window, "load", show);
于 2012-06-29T15:08:23.147 に答える