[javascript] IE nie wyświetla scryptu

0

Prosiłabym o pomoc w update scryptu tak aby wyświetlany był poprawnie pod IE.

<html>
<head>
<meta http-equiv='content-type' content='text/html; charset=windows-1250'>
<style type='text/css'>
.zly
{
  color: red;
}
.dobry
{
  color: green;
  font-weight: bold;
}
legend
{
  font-weight: bold;
}
</style>
</head>
<body>
<form id='wypowiedz'>
  <fieldset id='wstepy'>
    <legend>Wybierz wstęp</legend>
  </fieldset>
  <fieldset id='rozwiniecie'>
    <legend>i zaznacz dowolną ilość odpowiedzi</legend>
  </fieldset>
  <div style='width: 100%; text-align: center'>
    <input type='button' onclick='wygeneruj()' value='Dodaj'>
    <input type='button' onclick='window.close();' value='Zamknij'>
  </div>
</form> 
<script language='JavaScript'>

var calosc;
var wypowiedz;
var wstepy;

function isArray(obj) {
   if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}

function stworz_li( typ, nazwa, przedrostek, wartosc, onchange, etykieta, sprzezony )
{
  var el = document.createElement( 'li' );   
    var check = document.createElement( "input" );
	  check.setAttribute( "type", typ );
	  if( typ == "radio" )
        check.setAttribute( "name", przedrostek );
	  else
        check.setAttribute( "name", przedrostek + nazwa );
	  check.setAttribute( "id", przedrostek + nazwa );
	  check.setAttribute( "value", wartosc );
	  if( sprzezony )
	    check.style.visibility = 'hidden';
	  if( onchange != null )
	    check.addEventListener( "change", onchange, false );
	  
	var label = document.createElement( "label" );
	  label.setAttribute( "id", przedrostek + nazwa + "_label" );
	  label.setAttribute( "for", przedrostek + nazwa );
	  label.innerHTML = etykieta;
	
	el.appendChild( check );
	el.appendChild( label );
  return el;
}
function wypisz( tablica, tablica_przet, indeks )
{
  var lista = document.createElement( 'ul' );
  var nr = -1;
  var nastepny_sprzez = false;
  for( var i=0; i<tablica.length; i++ )
    if( isArray( tablica[i] ) )
	{
	  nr++;
	  lista.appendChild( wypisz( tablica[i], tablica_przet[i], indeks + nr.toString() + "." ) );
	}
	else
	{
	  nr++;
	  var etykieta = tablica[i];
	  var sprzez = nastepny_sprzez;
	  if( tablica[i][0] == '^' )
	  {
	    etykieta = tablica[i].substring( 1, tablica[i].length );
		nastepny_sprzez = true;
	  }
	  else
	    nastepny_sprzez = false;
	  var nazwa = indeks + nr.toString();
	  lista.appendChild( stworz_li( "checkbox", nazwa, "", tablica_przet[i], klikniecie, etykieta, sprzez ) );
	}
  return lista;
}

function nastepnyId( id )
{
  var ost  = id.lastIndexOf( "." );
  var nr;
  var przed = "";
  if( ost < 0 )
    nr = parseInt( id );
  else
  {
    przed = id.substring( 0, ost );
    nr = id.substring( ost+1, id.length );
  }
  var nowy_nr = nr+1;
  if( document.getElementById( przed + nowy_nr.toString() ) )
    return przed + nowy_nr.toString();
  return przed + (nowy_nr+1).toString();
}

function klikniecie( event )
{
  if( sprzezony( nastepnyId( event.currentTarget.id  ) ) )
    document.getElementById( nastepnyId( event.currentTarget.id ) ).checked = event.currentTarget.checked;
    
  return sprawdz( wypowiedz, "" );
}

function ustaw_wszystkie_zle( tablica, indeks )
{
  var nr = -1;
  var ok = false;
  for( var i=0; i<tablica.length; i++ )
  {
    nr++;
    if( isArray( tablica[i] ) )
	  ustaw_wszystkie_zle( tablica[i], indeks + nr.toString() + "." );
	else
	{
	  var ten = document.getElementById( indeks + nr.toString() );
	  var label = ten.parentNode.getElementsByTagName( "label" )[0];
	  if( ten.checked )
	    label.className = "zly";
	  else
	    label.className = "";
	}
  }
}

function sprzezony( id )
{
  if( document.getElementById( id ) )
    if( document.getElementById( id ).style.visibility == 'hidden' )
	  return true;
  return false;
}

function sprawdz( tablica, indeks )
{
  var nr = -1;
  var ok = false;
  for( var i=0; i<tablica.length; i++ )
  {
	nr++;
    if( isArray( tablica[i] ) || sprzezony( indeks + nr.toString() ) )
	  continue;
	else
	{
	  var ten = document.getElementById( indeks + nr.toString() );
	  var label = ten.parentNode.getElementsByTagName( "label" )[0];
	  if( ten.checked )
	  {
	    if( i < tablica.length-1 && isArray( tablica[i+1] ) )
	    {
	      if( sprawdz( tablica[i+1], indeks + (nr+1).toString() + "." ) )
		  {
		    label.className = "dobry";
			ok = true;
		  }
		  else
		    label.className = "zly";
	    }
		else
		{
		  ok = true;
		  label.className = "dobry";
		}
	  }
	  else
	  {
	    if( i < tablica.length-1 && isArray( tablica[i+1] ) ) //jeżeli następny jest tablicą
	      ustaw_wszystkie_zle( tablica[i+1], indeks + (nr+1).toString() + "." );
	    label.className = "";
	  }
	  if( sprzezony( nastepnyId( indeks + nr.toString() ) ) )
	  {
	    var nast = document.getElementById( nastepnyId( indeks + nr.toString() ) );
		var nast_label = nast.parentNode.getElementsByTagName( "label" )[0];
	 	var nast_tab = i+3; //+1 to tablica tego pierwszego, +2 to sprzężony, +3 to opcje sprzężonego
		if( label.className == "dobry" )
		{
		  if( isArray( tablica[nast_tab] ) )
		    if( !sprawdz( tablica[nast_tab], indeks + (nr+(nast_tab-i)).toString() + "." ) )
			{
		      label.className = "zly";
			  ok = false;  
			}
			
		}
		nast_label.className = label.className;
		if( label.className != "dobry" && isArray( tablica[nast_tab] ) )
		{
		  ustaw_wszystkie_zle( tablica[nast_tab], indeks + (nr+(nast_tab-i)).toString() + "." );
		  ustaw_wszystkie_zle( tablica[i+1], indeks + (nr+1).toString() + "." );
	  } }
	}
  }
  return ok;
}

function poziom( indeks )
{
  var poziom = 0;
  for( var i=0; i<indeks.length; i++ )
    if( indeks[i] == '.' )
	  poziom++;
  return poziom;
}

function wygeneruj()
{
  if( !sprawdz( wypowiedz, "" ) )
  {
    alert( "Musisz wybrać przynajmniej jedną pełną odpowiedź." );
	return;
  }
  var tresc;
  for( var i=0; i<wstepy.length; i++ )
    if( document.getElementById( "wstep"+i ).checked )
	  tresc = document.getElementById( "wstep"+i ).value;
  
  var checks = calosc.getElementsByTagName( "input" );
  var poz = -1;
  for( var i = 0; i<checks.length; i++ )
    if( document.getElementById( checks[i].id + "_label" ).className.indexOf( "dobry" ) != -1 )
	{
	  var akt_poz = poziom( checks[i].id );
	  var spr = sprzezony( checks[i].id );
	  
	  if( akt_poz > poz )
	    tresc+= " " + checks[i].value;
	  else if( akt_poz == poz )
	    tresc+= ", " + checks[i].value;
	  else if( akt_poz < poz )
	    tresc+= (spr?" ":"; ") + checks[i].value;
		
	  poz = akt_poz;
	}
  tresc+= '. ';
  window.opener.document.getElementById( 'wypowiedz' ).value += tresc;
  wyczysc();
}

function wypisz_wstepy( wstepy, wstepy_przet )
{
  var ul = document.createElement( "ul" );
  for( var i=0; i<wstepy.length; i++ )
    ul.appendChild( stworz_li( "radio", i, "wstep", wstepy_przet[i], null, wstepy[i] ) );
  return ul;
}

function wyczysc()
{
  var checks = calosc.getElementsByTagName( "input" );
  for( var i = 0; i<checks.length; i++ )
  {
    checks[i].checked = false;
	document.getElementById( checks[i].id + "_label" ).className = "";
  }
  document.getElementById( "wstep0" ).checked = true;
}

wypowiedz = Array( 
  "rozumiejącą uczucia innych",
  "^jestem osobą",
  Array(
    "dobrze",
	"żle"
	),
  "rozumianą przez",
  Array(
    "rodzinę",
	"znajomych",
	"obcych"
  ),
  "^lubię gdy jest",
  Array(
    "zimno",
	"ciepło"
  ),
  "wiosną",
  "lubię sok",
  "na końcu powinno być coś normalnego (jak 'lubię sok' ;))",
  "jest to związane z zaszytym gdzieś błędem, jak na razie nie udało mi się go znaleźć",
  "naturalnie, po staremu działa",
  Array(
    "normalnie",
	"a jakże inaczej"
  ),
  "^przykład",
  Array(
    "złego",
	"dobrego"
  ),
  "działania",
  "arara"
);

wypowiedz_przet = Array( 
  "ANG rozumiejącą uczucia innych",
  "ANG jestem osobą",
  Array(
    "ANG dobrze",
	"ANG żle"
	),
  "ANG rozumianą przez",
  Array(
    "ANG rodzinę",
	"ANG znajomych",
	"ANG obcych"
  ),
  "ANG lubię gdy jest",
  Array(
    "ANG zimno",
	"ANG ciepło"
  ),
  "ANG wiosną",
  "ANG lubię sok",
  "ANG na końcu powinno być coś normalnego (jak 'lubię sok' ;))",
  "ANG jest to związane z zaszytym gdzieś błędem, jak na razie nie udało mi się go znaleźć",
  "ANG naturalnie, po staremu działa",
  Array(
    "ANG normalnie",
	"ANG a jakże inaczej"
  ),
  "ANG przykład",
  Array(
    "ANG złego",
	"ANG dobrego"
  ),
  "ANG działania",
  "ANG arara"
);

wstepy = Array (
  "Jestem osobą...",

);

wstepy_przet = Array (
  "ANG Jestem osobą",
);

calosc = wypisz( wypowiedz, wypowiedz_przet, "" );
document.getElementById( 'rozwiniecie' ).appendChild( calosc );
document.getElementById( 'wstepy' ).appendChild( wypisz_wstepy( wstepy, wstepy_przet ) );
document.getElementById( 'wstep0' ).checked = true;
</script>
</body>
</html>
0
  1. Usuń przecinki za ostatnim elementem tablicy np. tu:

wstepy = Array (
"Jestem osobą...",
);

  1. addEventListner nie działa pod IE. Tutaj gotowiec: http://www.quirksmode.org/blog/archives/2005/08/addevent_consid.html

[dopisane]
No jeszcze nie do końca wszystko działa, ale IE podaje linijkę gdzie jest błąd, więc powinieneś szybko go odszukać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1