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.
Händelsehanterare som krockar, onBlur och onClick
6 svar · 256 visningar · startad av basjonne
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)">
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.
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?
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.
Gött! Hittade precis document.activeElement men det fungerade inte i Firefox. Ska prova att sätta en global variabel som du skrev. Tackar!