PDA

View Full Version : سوال: اجرای تابع به صورت خودکار هر 4 ثانیه یکبار



alismith
چهارشنبه 03 فروردین 1390, 16:15 عصر
سلام کسی میدونه چرا این کد کار نمی کنه


<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>

<script language="javascript">
var i;
function numq(x){
i = x;

document.write(i + "<br/>");
++i;
if(i!=10){
setTimeout("numq(i)",4000);
}

}

numq(1);

</script>

</head>

<body>
</body>
</html>



خودتون امتحان کنید تا 2 بیشتر چاپ نمی کنه؟؟؟؟

خیلی ممنون می شم کسی جواب بده :لبخندساده:

exlord
چهارشنبه 03 فروردین 1390, 19:53 عصر
Timeout فقط یکبار اجرا میشه .... برای اینجور کارار بهتره از setInterval استفاده کنین
و کدتونو به این صورت تغییر بدبن ...
document.body.innerHTML = i;

var i = 0;
function numq(x) {
i = x;

//document.write(i + "");
document.body.innerHTML = i;
i++;
if (i == 10)
{
//setTimeout("numq(i)", 4000);
clearInterval(a);
}

}
i = 1;
var a = setInterval("numq(i)",2000);

eleboys
چهارشنبه 03 فروردین 1390, 19:56 عصر
دوست عزیز مشکل شما استفاده از تابع document.write هستش. درصورت استفاده از این تابع کل HTML صفحه با متنی که به این تابع پاس شده جایگزین میشه. در مورد شما هم بخاطر اینکه HTML دیگه ای روی صفحه ندارید شاید به چشم نیاد اما همون بار اول اجرا کلیه محتویات صفحه (حتی تگ scritp و کدهایی که نوشتید پاک میشن و دیگه تابعی نمی مونه که 4ثانیه بعد اجرا بشه)

Note: Try to avoid using document.write() in real life JavaScript code. The entire HTML page will be overwritten if document.write() is used inside a function, or after the page is loaded. However, document.write() is an easy way to demonstrate JavaScript output in a tutorial.

مثالتون رو به این حالت تغییر بدید که هم بهینه تر هست و هم مشکل حل میشه.
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>

<script language="javascript">
var i=1;
function numq() {
var ctrl = document.getElementById("lbCount")
ctrl.innerHTML = i.toString();
++i;
if(i!=10){
setTimeout(numq,4000);
}
}
</script>
</head>

<body onload="numq()">
<span id="lbCount"></span>
</body>
</html>