W jaki sposób pobrać aktywny element w FireFoxie?
Mam taki kod który działa dobrze pod IE i chciałem go dostosować do FireFoxa:
document.activeElement.value=document.activeElement.value+ " tekst";
W jaki sposób pobrać aktywny element w FireFoxie?
Mam taki kod który działa dobrze pod IE i chciałem go dostosować do FireFoxa:
document.activeElement.value=document.activeElement.value+ " tekst";
a pokaz wiecej swojego kodu, bo wydaje mi sie ze document.activeElement to to samo co event.srcElement, jezeli tak to da sie pod Mozille dostosowac...
Kod wygląda tak (po użyciu twojego polecenia):
<html>
<head>
</head>
<body>
<input type='text' name='pierwszy'>
<textarea name='drugi'>
</textarea>
<input type='button' name='przycisk' value='wstaw' onMouseDown='javascript: alert(event.srcElement.nodeName)'>
</body>
</html>
a jego sens ma być taki że wyświetla mi nazwę elementu aktywnego przed przyciśnięciem przycisku.
Kod który działa na IE wygląda tak:
<html>
<head>
</head>
<body>
<input type='text' name='pierwszy'>
<textarea name='drugi'>
</textarea>
<input type='button' name='przycisk' value='wstaw' onMouseDown='javascript: alert(document.activeElement.nodeName)'>
</body>
</html>
Drugi przykład wyświetla "INPUT" lub "TEXTAREA". Pierwszy tylko "INPUT".
ok, a wiec:
document.activeElement istnieje tylko w IE i na to nic nie poradzimy...
obiekt ten dziwnie się zachowuje, tzn. moim zdaniem po wciśnięciu przycisku powinien wskazywać na ten przycisk a nie na ostatnio aktywny element, no ale dzięki temu zachowaniu spełnia on twoje oczekiwania...
rozwiązanie widzę tylko jedno, zapisywać do dwóch zmiennych (myCurrentAE i myLastAE) ostatnio aktywne elementy, w tedy dla zdarzenia onmousedown obiekt który jest Ci potrzebny będzie w myCurrentAE a dla zdarzenia onclick będzie w myLastAE, przykład:
<script>
var myCurrentAE = myLastAE = null;
function addEvent(elm, evnt, func) {
if (elm.addEventListener) {
elm.addEventListener(evnt, func, false);
}
else if (elm.attachEvent) {
elm.attachEvent('on' + evnt, function() { func(null, elm) } );
}
}
addEvent(window, 'load', function() {
var tagsList = ['input', 'textarea'];
for (var i = 0; i < tagsList.length; i++) {
var tags = document.getElementsByTagName(tagsList[i])
for (var j = 0; j < tags.length; j++) {
addEvent(tags[j], 'focus', function(e, t) {
if (! t) t = this;
myLastAE = myCurrentAE;
myCurrentAE = t;
} );
}
}
} );
</script>
<form>
<input type='text' name='pierwszy'>
<textarea name='drugi'></textarea>
<input type='button' name='przycisk' value='wstaw'
onclick='alert(myLastAE.tagName)'>
</form>
obiekt ten dziwnie się zachowuje, tzn. moim zdaniem po wciśnięciu przycisku powinien wskazywać na ten przycisk a nie na ostatnio aktywny element, no ale dzięki temu zachowaniu spełnia on twoje oczekiwania...
Według mnie chyba dobrze działa, bo z tego co wiem (bynajmniej w innych językach programowania) zdarzenie onMouseDown jest wywoływane przed uzyskaniem focusa przez element czyli na rzecz obiektu poprzedniego. Dopiero potem jest focus i zdarzenie onClick.
Dzięki za przykład. Spróbuję go wykorzystać w wolnej chwili (pewnie dopiero w weekend). W razie problemów jeszcze dam znać.
Wielkie dzięki o to mi chodziło.
Próbowałem wcześniej z eventami, ale musiałem robić coś źle.