webForumDet fria alternativet

Händelsehanterare som krockar, onBlur och onClick

JavaScript

6 svar · 256 visningar · startad av basjonne

Medlem sedan okt. 200524 inlägg
Frågan#1

Jag har problem med händelshanterare som krockar. Jag har ett formulär där värdet ska sparas m h a onBlur, funkar fint. Jag har också en avbryt-knapp som ska återställa fältet om man har hamnat där av misstag. Men när man klickar på den så anropas funktionen för onBlur. Jag har också lagt till en kontroll som kollar om man man har tryckt på Avbryt-knappen när funktionen för onBlur anropas men det fungerar inte... Informationen sparas iaf. Någon som har en lösning på detta problem? Tacksam för svar.

Medlem sedan dec. 20025 483 inlägg
#2

Hej!

Visa gärna den kod du använder. :)

Medlem sedan okt. 200524 inlägg
#3

Självklart!

Här är de funktioner jag använder:

function abort(id) { 
  if (document.users.resetButton.value == 1) {
  	return true;  
  }
  else return false;  
  
}

function editText (id) {
	var button = 'res' + id;  
	startValue = document.getElementById(id).value;
	document.getElementById(id).className = "editText";

	if (document.getElementById(id)) {
		document.getElementById(button).innerHTML = '<input type="reset" name="resetButton" onMouseDown="saveText(id); this.value = 1" class="button" value="Avbryt">';
	}
}

function saveText (id) {
	
	var button = 'res' + id;  
	if (document.getElementById(id).value != startValue && !abort(id)) {  // om man har ändrat värdet och lämnat fältet/tryckt ENTER
		startValue = document.getElementById(id).value;
		sendRequest(id);
		showFeedbackWhenSaved(id);
	}
	else if (document.getElementById(id).value != startValue && abort(id)) { // om man har ändrat värdet och tryckt på "Avbryt" 
		koll();
		document.getElementById(id).value = startValue; 
		resetText(id);
	}
	else {
		resetText(id); // om man har lämnat fältet/tryckt ENTER och inte ändrat något... inget anropar till servern görs. 
	}
	if (document.getElementById(id)) { 
		document.getElementById(button).innerHTML = ' ';
	}
}

Och så här ser en rad i formuläret ut:

<input id="name[<?=$rad[0]?>]" name="name<?=$rad[0]?>" value="<?=$rad[1]?>" class="staticText" type="text" onBlur="saveText(this.id)" onFocus="editText(this.id)" onKeyPress="return submitEnter(this,event, this.id)">
Medlem sedan dec. 20025 483 inlägg
#4

Hm, det verkar inte vara den bästa löningen att använda onblur för det här. Lösningen jag hade tänkt mig, gick ut på att fånga upp vilket element som får fokus när onblur körs. Om elementet är "Avbryt"-knappen skulle man då kunna ge tusan i att köra saveText() (onblur). Men jag kan som sagt inte lista ut hur detta skulle kunna göras.

Medlem sedan okt. 200524 inlägg
#5

Nej, håller med dig om att det kanske inte är den bästa lösningen... men jag skulle gärna vilja ha det så för tillfället för att se hur användarna reagerar. Om man kollar vilket element som har fokus innan man sparar, som du säger, kanske det går att lösa ändå. Hur kollar jag enklast vilket element som har fokus?

Medlem sedan dec. 20025 483 inlägg
#6

I IE kan du använda document.activeElement. Annars kan du definiera en variabel, säg, currFocus globalt och sedan i ett elements onfocus-attribut sätta currFocus = this och därefter kolla innehållet i den variabeln.

Medlem sedan okt. 200524 inlägg
#7

Gött! Hittade precis document.activeElement men det fungerade inte i Firefox. Ska prova att sätta en global variabel som du skrev. Tackar!

259 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)