Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ezequiel2

[Resolvido] DOCTYPE interferindo na execução do Javascript

Recommended Posts

Olá, estou enfrentando um problema e não estou conseguindo resolver.

No meu site uso o Doctype Transitional:

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

O único problema é que quando há qualquer especificação de doctype, seja Strict ou Transitional alguns javascripts não funcionam corretamente, ou simplesmente não funcionam.

Agora, se eu apagar o Doctype daí os scripts funcionam. Se deixo, não funciona!

Mas como é essencial o uso do Doctype, não sei o que fazer.

Um exemplo do javascript que não está funcionando:

 

<script language="JavaScript" type="text/javascript"><!--
var news = new Array(
[ "titulo1" , "http://www.site.com/"],
[ "titulo2" , "http://www.site.com/"],
[]
);

var ticker_layer = false;
var step_time = 25;
var freeze_time = 2000;
var news_index = 0;
var title_index = 0;
var end_title = "_";

function begin_roll_ticker(){
	window.setTimeout( "roll_ticker()" , step_time );
}
function roll_ticker(){
	var title;
	if ( news.length > news_index + 1 && news[news_index][0].length >= title_index ){
		title = news[ news_index ];
		document.all('ticker_anchor').href = title[1];
		document.all('ticker').innerHTML = title[0].substring( 0 , title_index );
		if ( title[0].length > title_index ) document.all('ticker').innerHTML += end_title;
		title_index++;
		window.setTimeout( "roll_ticker()" , step_time );
	}
	else{
		news.length == news_index + 2 ? news_index = 0 : news_index++;
		title_index = 0;
		window.setTimeout( "roll_ticker()" , freeze_time );
	}
}

window.onload = begin_roll_ticker;

//--></script>

E para exibir o script usa-se:

<a href="#" target="_top" name="ticker_anchor">
<div id="ticker"></div>
</a>

Alguém poderia me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse problema é tão inédito? :P. Ninguém passou por isso?

Se eu não tivesse tentado tudo, não estaria aqui tomando espaço e tempo na comunidade.

Qualquer informação é bem-vinda ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha cara eu aconselho mudar o script, tirar esse document.all que não eh padrão...pega por id com o document.getElementById...acho que pode resolver...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Puxa, verdade! Dei uma procurada e vi que o elemnto document.all não é reconhecido pela w3c.

Então tentei fazer com document.getElementById, mas não funcionou, nem tirando o doctype.

Olha só como fiz:

<script language="JavaScript" type="text/javascript"><!--
var news = new Array(
[ "titulo1" , "http://www.site.com/"],
[ "titulo2" , "http://www.site.com/"],
[]
);

var ticker_layer = false;
var step_time = 25;
var freeze_time = 2000;
var news_index = 0;
var title_index = 0;
var end_title = "_";

function begin_roll_ticker(){
	window.setTimeout( "roll_ticker()" , step_time );
}
function roll_ticker(){
	var title;
	if ( news.length > news_index + 1 && news[news_index][0].length >= title_index ){
		title = news[ news_index ];
		document.getElementById("ticker_anchor").href = title[1];
		document.getElementById("ticker").innerHTML = title[0].substring( 0 , title_index );
		if ( title[0].length > title_index ) document.getElementById("ticker").innerHTML += end_title;
		title_index++;
		window.setTimeout( "roll_ticker()" , step_time );
	}
	else{
		news.length == news_index + 2 ? news_index = 0 : news_index++;
		title_index = 0;
		window.setTimeout( "roll_ticker()" , freeze_time );
	}
}
window.onload = begin_roll_ticker;
//--></script>

Só troquei document.all por document.getElementById, tem algum parâmetro sendo usado que antes só aceitava no document.all? E que agora não funciona com document.getElementById?

Compartilhar este post


Link para o post
Compartilhar em outros sites

nuss, document.all, fazia tempo q eu nao via isso XD

 

cara, eu ja tive esse problema tb, o meu era pra mexer o scroll, n pegava com doctype... realmente tem umas diferencas, pode parecer meio drastico, mas use doctype e refaca todo o script =P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Também me toquei que:

<a href="#" target="_top" name="ticker_anchor">
<div id="ticker"></div>
</a>
A tag <a> não é por id é por name, então troquei lá só na "ticker_anchor" de document.getElementById por document.getElementByName. Mesmo assim não funcionou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa valeu Otata e Wilker. Era mesmo, a W3C não aceita o document.all.

O problema que estava dando era que tinha o parâmetro name="ticker_anchor". Daí troquei para id="ticker_anchor".

Funcionou beleza. Esse código é antigo mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.