webForumDet fria alternativet

varför fungerar inte min alert? Kraschar koden och varför

JavaScript

4 svar · 691 visningar · startad av swingman

Medlem sedan jan. 200686 inlägg
Frågan#1

Kan någon snälla berätta för mig varför följande kod kraschar. alerten kommer inte upp när jag klickat på mybutton.

window.onload = init;

function init () {
	hideAllPublications();
	createForm();
}

function hideAllPublications () {
	var publications = document.getElementById('publications');
	var para = publications.getElementsByTagName('p');
	
	for(var i = 0; i < para.length; i++){
		para[i].style.display= 'none';
		}
}

function createForm () {
	var publications = document.getElementById('publications');
	var myform=document.createElement("form");
	publications.appendChild(myform)[0];	
    	
	var inputBox=document.createElement('input');
	inputBox.setAttribute('id','myInput');	
	myform.appendChild(inputBox)[0];	
	document.getElementById('myInput').focus();

    	mybutton=document.createElement('BUTTON');
	mybutton.style.height=20;
	mybutton.style.width=75;
    
    	theText=document.createTextNode('Search');
    	mybutton.appendChild(theText);	
	myform.appendChild(mybutton);
	
	var str= document.getElementById('myInput').firstChild.nodeValue;
	mybutton.onclick = alert(str);	
}
Medlem sedan juni 20019 519 inlägg
#2

När du binder event så skall du binda en funktion, men nu binder du en en funktion som körs direkt och som inte retunera en metod.

mybutton.onclick = function() {
	var str= document.getElementById('myInput').value;
	alert(str);
}

och du använder inte dig av firstChild i en input element, ett input element har inga barn.

Medlem sedan jan. 200686 inlägg
#3

Voigtann1: Tack för svaret. Jag skrev en ny tråd på det här för att minska på koden men du hade egentligen redan sagt det där med att inte binda en funktion som inte returnerar något. Det jag ändå undrar är varför jag inte få något värde tillbaka nu. Det är bara null. Jag skulle vilja ha få texten jag skriver in i inputboxen tillbaka i en alert.
Min kod just nu...

window.onload = init;

function init () {
	hideAllPublications();
	createForm();
}

function hideAllPublications () {
	var publications = document.getElementById('publications');
	var para = publications.getElementsByTagName('p');
	
	for(var i = 0; i < para.length; i++){
		para[i].style.display= 'none';
		}
}

function createForm () {
	var publications = document.getElementById('publications');
	var myform=document.createElement("form");
	publications.appendChild(myform)[0];	
    	
	var inputBox=document.createElement('input');
	inputBox.setAttribute('id','myInput');	
	myform.appendChild(inputBox)[0];	
	document.getElementById('myInput').focus();

    	mybutton=document.createElement('BUTTON');
	mybutton.style.height=20;
	mybutton.style.width=75;
    
    	theText=document.createTextNode('Search');//assign the value of the button
    	mybutton.appendChild(theText);	
	myform.appendChild(mybutton);
	
	var str= document.getElementById('myInput').nodeValue;
	mybutton.onclick = function() {alert(str);}	
}
Medlem sedan juni 20019 519 inlägg
#4

den är null för det är inte det du vill kolla på, det är value du vill kolla på i en input, sen måste du köra str kollen varje gång då annars kommer str vara default värdet eller det värde som #myInput har när koden läses in första gången.

Medlem sedan jan. 200686 inlägg
#5

så enkelt när du väl säger svaret men jag hoppas att jag lär mig något och att prgramering blir lättare med tiden...

262 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)