webForumDet fria alternativet

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

JavaScriptur 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...

137 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)