Uncaught TypeError: Cannot set property innerHTML of null

Discutii si intrebari legate de scripturi si functii JavaScript, jQuery si Ajax, cod JavaScript in general.
Avatar utilizator
evident
Mesaje: 168

Uncaught TypeError: Cannot set property innerHTML of null

Am scriptul

Cod: Selectaţi tot

<script>
function blockToggle(type,blockee,elem){
	var conf = confirm("Press OK to confirm the '"+type+"' action on user <?php echo $u; ?>.");
	if(conf != true){
		return false;
	}
	var elem = document.getElementById(elem);
	elem.innerHTML = 'please wait ...';
	var ajax = ajaxObj("POST", "includes/block_system.php");
	ajax.onreadystatechange = function() {
	if(ajaxReturn(ajax) == true) {
		if(ajax.responseText == "blocked_ok"){
		elem.innerHTML = '<button id="update_button" class="btn btn-primary" style="width:49%"  onclick="blockToggle(\'unblock\',\'<?php echo $u; ?>\',\'blockBtn\')">Unblock User</button>';
		} else if(ajax.responseText == "unblocked_ok"){
			elem.innerHTML = '<button id="update_button" class="btn btn-primary" style="width:49%"  onclick="blockToggle(\'block\',\'<?php echo $u; ?>\',\'blockBtn\')">Block User</button>';
		} else {
			alert(ajax.responseText);
			elem.innerHTML = 'Try again later';
			}
		}
	}
	ajax.send("type="+type+"&blockee="+blockee);
}
</script>
Primesc eroarea:

Cod: Selectaţi tot

Uncaught TypeError: Cannot set property 'innerHTML' of null
In linia:

Cod: Selectaţi tot

elem.innerHTML = 'please wait ...';

MarPlo Mesaje: 4343
Salut
Dupa cum spune textul erorii, nu ai in pagina un element HTML cu id-ul transmis prin argumenul "elem" al functiei blockToggle() cand o accesezi.
Vezi partea de cod unde e accesata prima data acea functie si ce id e transmis pentru parametru "elem".

evident Mesaje: 168

Cod: Selectaţi tot

<button id="update_button" class="btn btn-primary" style="width:49%" onclick="blockToggle(\'unblock\',\''.$u.'\',\'blockBtn\')">Deblocheaza</button>

MarPlo Mesaje: 4343
Daca butonul cu codul postat e direct in pagina, cred ca acesta reprezinta cel prin care e apelata functia la clic pe el.
Al treilea parametru al acelei functii e pentru id-ul unui element din pagina, si, conform apelarii ei, argumentul 3 (id-ul transmis) e "blockBtn".
Ai un element html in pagina cu id="blockBtn"?
- Adauga un: alert(elem); in acea functie, inainte de linia de cod cu eroarea, sa vezi ce ID afiseaza, apoi verifica in sursa paginii daca e un element cu acel ID.

evident Mesaje: 168
am pus acel alert si imi zice null

MarPlo Mesaje: 4343
Daca raspunsul e "null" inseamna ca in documentul html nu ai acel element cand se executa functia. Ori il adaugi in codul html, ori eviti eroarea folosind:

Cod: Selectaţi tot

if(elem) elem.innerHTML = '...';
- ca sa aplice innerHTML doar daca elementul exista.