سؤال

ومرحبا الماجستير من الشبكة العالمية للتنمية، أولا أريد أن أقول إنني لا يعتقد في عيني - لقد حصلت على قطعة من جافا سكريبت الذي يعمل على ما يرام في IE7، و لا في فايرفوكس !!! :)))) وكان ذلك نكتة قليلا. :) لذلك أنا سبق وقلت لك مشكلة (لم يكن نكتة)، والآن أنا لصق جافا سكريبت:

<script type="text/javascript">

<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->

<!-- Begin
var ms;
ms = %%CONTENT_REFRESH%% - 5;
var stop;
stop = 0;
var myvalue;

function display() {
    if (!stop) {
        setTimeout("display();", 1000);
    }
    thetime.value = myvalue;
}
function recalc() {
    var hours;
    var minutes;
    var seconds;

    ms = ms - 1;
    hours = Math.floor(ms / 3600);
    minutes = Math.floor(ms / 60);
    if (minutes < 10) {
        minutes = "0"+minutes;
    }
    seconds = ms - (minutes*60) - (hours*3600);
    if (seconds < 10) {
        seconds = "0"+seconds;
    }
    myvalue = hours+":"+minutes+":"+seconds;
    thetime.value = myvalue;
    if (myvalue == "0:00:00") {
        stop = 1;
    }
    if (!stop) {
        setTimeout("recalc();", 1000);
    }
}
// End -->
</SCRIPT>

وهذا هو السيناريو قديمة جدا وأنا أعلم ذلك. فإنه يأخذ بلدي الحالي مرة أغنية المتبقية، من وجهة نظري برنامج Winamp وظائف العد التنازلي في الموقع. ولكن كما قلت، فإنه لا يعمل في فايرفوكس.

والجسم والتعليمات البرمجية التي تدعو للعد التنازلي يبدو مثل هذا:

<body class="playlist_body" onLoad="recalc();display();">

Time Left In Song: <INPUT align="center" TYPE="text" Name="thetime" size=5 />

</body>

و// تحرير: أنا أنظر إلى مصاب بهوس الاحراق، ورأيت الخطأ التالي:

thetime is not defined
recalc()playlist.cgi (line 87)
function onload(event) { recalc(); display(); }(load )1 (line 2)
error source line: [Break on this error] thetime.value = myvalue;\n
هل كانت مفيدة؟

المحلول

والمشكلة هي أنه هو الوصول إلى عناصر DOM بالاسم.

قم بإضافة التعليمات البرمجية التالية إلى أعلى لتعريف متغير للعنصر thetime، إضافة id="thetime" إلى INPUT، وإضافة استدعاء init(); في onload في العنصر body.

var thetime;

function init() {
    thetime = document.getElementById('thetime');
}

وبالمناسبة، يمكنك استبدال النص مع وجود عنصر DIV منتظم من خلال وضع هوية div لthetime، واستبدال thetime.value مع thetime.innerHTML.

وبالإضافة إلى ذلك، فإنه من الأفضل أن ندعو setTimeout مع وظيفة بدلا من السلسلة؛ يجب استبدال "display();" و"recalc();" مع display وrecalc على التوالي.

نصائح أخرى

وIE لديها "ميزة" حيث يتم وضع عنصر مع سمة الاسم في وجوه نافذة، على سبيل المثال.

<div name=foo></div>

وسوف اعطيكم "فو" متغير - وهذا هو غير القياسية، يتعين عليك أن تفعل

document.getElementByName("foo") 

للحصول على عناصر الانتاج الموقت.

var thetime = document.getElementById("thetime");

وإضافة معرف = "thetime" بدلا من اسم فقط = "thetime" للإدخال

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top