[JS] Aktywny element w FireFoxie

0

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";
0

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

0

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

0

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:

&lt;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>
0

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

0

Wielkie dzięki o to mi chodziło.
Próbowałem wcześniej z eventami, ale musiałem robić coś źle.

1 użytkowników online, w tym zalogowanych: 0, gości: 1