Opera Button dis-/enabling Problem

kain0015

Grünschnabel
Hallo!
Ich habe mir ein Script geschrieben, mit dem ich sämtliche Links und Buttons auf einer Seite deaktivieren möchte, und ein weiteres um diese wieder zu aktivieren.
Mein Problem ist, dass das Script nur im Firefox funktioniert. Im IE (was nicht so wichtig ist) aktiviert er die Links nicht mehr, und im Opera aktiviert er nicht immer alle Buttons... Aber hier mal der Code:

Code:
var siteLinkStatus;
var siteButtonStatus;
var buttonElements;

function disableAllCommands(){
  objLinks = document.links;
  
  siteLinkStatus = new Array(objLinks.length);
  
  for(i=0;i<objLinks.length;i++){
  	siteLinkStatus[i] = objLinks[i].onclick.toString();
    objLinks[i].disabled = true;
    objLinks[i].onclick = function(){return false;}
  }
  
  myForms = document.forms;
  siteButtonStatus = new Array();
  buttonElements = new Array();
  count = 0; 
  
  for (i=0; i < myForms.length; i++) {
  	var curElements = myForms[i].elements;
  	
  	for (x = 0; x < curElements.length; x++) {
  		var tempobj=curElements[x];
  		if(tempobj.type.toLowerCase()=="submit"||tempobj.type.toLowerCase()=="reset"||tempobj.type.toLowerCase()=="button") {
  			buttonElements[count] = tempobj;
  			siteButtonStatus[count] = tempobj.disabled;
  			tempobj.disabled = true;
  			count++;
  		}
  	}
  }
}

function enableAllCommands() {
  objLinks = document.links;
  
  for(i=0;i<objLinks.length;i++){
    objLinks[i].disabled = false;
    objLinks[i].onclick = new Function(siteLinkStatus[i]);
  }

  for (i = 0; i < buttonElements.length; i++) {
  	buttonElements[i].disabled = siteButtonStatus[i];
  }
}

Ich hoffe jemand erkennt den Fehler! Schonmal danke im vorraus.
mfg
 
Hi,

vielleicht lohnt es sich anders an das Problem heran zu gehen. Wird die Funktion zum ersten Mal aufgerufen,
erstellst du ein Array mit allen Elementen, die aktiviert/deaktiviert werden sollen. Jede Komponente dieses
Feldes erhält hierbei das Elementobjekt, den onclick-Event sowie einen Statusanzeiger.

Nun kannst du immer dieses Array durchlaufen und die Elemente wie gewünscht aktivieren bzw. deaktivieren.

Beispiel:
Code:
<html>
<head>
<title>www.tutorials.de</title>
<meta name="author" content="Quaese">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
  <!--
var arrObjects = null;

var arrLinkOnclicks = new Array();
// Array, das die Tags enthält, die aktiviert/deaktiviert werden sollen
var arrTags2Disable = new Array("a", "input", "button");

// Funktion erstellt ein Array mit allen Elemente, die dis-/enabled werden sollen
// ['elem'] - Objekt, ['onclick'] - onclick-Save, ['state'] - Zustand (ein/aus)
function makeArray(){
  var intCount = 0;  // Zählvariable für Objekt-Array

  for(var i=0; i<arrTags2Disable.length; i++){
    var arrHelp = document.getElementsByTagName(arrTags2Disable[i]);
    if((arrObjects == null) && (arrHelp.length)) arrObjects = new Array();

    // Kollektion durchlaufen
    for(var j=0; j<arrHelp.length; j++){
      // Falls es sich um einen INPUT-Tag handelt
      if(arrTags2Disable[i] == "input"){
        // Falls es sich um keine Schaltfläche handelt -> nächstes Element in Kollektion
        if(arrHelp[j].type.search(/(submit|reset|button)/) == -1){
          continue;
        }
      }

      // Neues Element
      arrObjects[intCount] = new Array();
      arrObjects[intCount]['elem']    = arrHelp[j];  // Elementobjekt
      arrObjects[intCount]['onclick'] = "";          // onclick-Komponente initialisieren
      arrObjects[intCount]['state']   = 0;           // state-Komponente initialisieren: 0 = enabled, 1 = disabled
      intCount++;
    }
  }
}

function disableAllCommands(){
  // Falls kein Elementarray existiert -> generieren
  (arrObjects == null) makeArray();

  // Elementarray durchlaufen
  for(var i=0; i<arrObjects.length; i++){
    // Neuen Zustand anzeigen
    arrObjects[i]['state'] = 1;
    // Aktuellen onclick-Event sichern
    arrObjects[i]['onclick'] = (typeof arrObjects[i]['elem'].onclick == "function")? arrObjects[i]['elem'].onclick : "";
    // Neuen onclick-Event zuweisen
    arrObjects[i]['elem'].onclick = function(){ return false;};
    // Element disablen
    arrObjects[i]['elem'].disabled = true;
  }
}

function enableAllCommands(){
  // Falls kein Elementarray existiert -> generieren u. Fkt. verlassen
  if(arrObjects == null){
    makeArray();
    return;
  }

  // Elementarray durchlaufen
  for(var i=0; i<arrObjects.length; i++){
    // Neuer Zustand
    arrObjects[i]['state'] = 0;
    // Gesicherten onclick-Event zuweisen
    arrObjects[i]['elem'].onclick  = arrObjects[i]['onclick'];
    // Element enablen
    arrObjects[i]['elem'].disabled = false;
  }
}
 //-->
</script>
</head>
<body>

<div>
  <span onclick="disableAllCommands();" style="border: 1px solid #000;">disable</span>
  <span onclick="enableAllCommands();" style="border: 1px solid #000;">ensable</span>
</div>

<a href="#" onclick="alert('hallo'); return false;">hallo  1</a>
<a href="#">hallo  2</a>

<form name="Formular">
  <input type="text" name="eingabe" value="12345">
  <input type="submit">
  <input type="reset">
  <input type="button" onclick="alert('hallo');" value="hallo">
</form>

<div><input type="submit"><input type="reset"><input type="button" value="button"></div>
<button onclick="">Button</button>
</body>
</html>
Ciao
Quaese
 
Zurück