Symulacja wpisywania tekstu

Odpowiedz Nowy wątek
2019-06-18 21:38
0

Witam wszystkich bardzo serdecznie.
Mam formularz z polem DIV - w którym można wpisywać tekst.
Jak mogę za pomocą javascript zasymulować że piszę bezpośrednio do tego pola ??
kombinuje za pomocą

var ev = new KeyboardEvent('keydown', {'keyCode':65, 'which':65});
document.querySelector("#test").dispatchEvent(ev);

Niestety nie uzyskuje wpisanej litery a, jak to ugryźć, oczywiście wpisanie za pomocą

document.querySelector("#test").innerHTML="Jakiś napis";

Odpada bo skrypt sprawdza czy faktycznie się piszę i wyświetli że nic się nie wpisało.

Jest jakiś patent na to ??
Dzięki serdeczne

Pozostało 580 znaków

2019-06-18 22:02
1

Walczyłam kiedyś z czymś podobnym. Nie dam głowy, czy to zadziała też w FF, bo finalnie testowałam tylko w Chromie i nie dam głowy, czy to usatysfakcjonuje skrypt testujący akurat na tej konkretnej stronie, ale użyłam czegoś takiego:

/* --- f: event --- */
function m_event(obiekt, typ) {
  var e = new Event(typ, {"bubbles": true, "cancelable": true});
  obiekt.dispatchEvent(e);
}
/* --- f: event --- */

/* --- f: m_klawisz --- */
function m_klawisz(obiekt, stan_klawisza, keyCode, charCode, code, ctrl, location) {
  /* --- zrób event --- */
  e = document.createEvent("KeyboardEvent");
  /* --- /zrób event --- */

  /* --- zainicjuj event --- */
  e.initKeyboardEvent(stan_klawisza, true, true, document.defaultView, keyCode, keyCode, "", "", false, "");
  /* koryguj parametry */
    Object.defineProperty(e, 'keyCode',  { get: function() {return this.keyCodeVal;} });     
    Object.defineProperty(e, 'which',    { get: function() {return this.keyCodeVal;} });
    Object.defineProperty(e, 'location', { get: function() {return location;} });
    Object.defineProperty(e, 'code',     { get: function() {return code} });
    e.keyCodeVal = keyCode;
  /* --- /zainicjuj event --- */

  /* --- wywołaj event --- */
  obiekt.dispatchEvent(e);
  /* --- /wywołaj event --- */
}
/* --- f: m_klawisz --- */

/* --- f: m_wklej --- */
function m_wklej(obiekt, tekst) {
  obiekt.focus();                                                   /* fokus */
  m_klawisz(obiekt, "keydown", 17, 0,   "ControlLeft", true,  1);    /* down Ctrl */
  m_klawisz(obiekt, "keydown", 86, 0,   "KeyV",        true,  0);    /* down V */
  m_klawisz(obiekt, "keypress", 0, 118, "KeyV",        true,  0);    /* down V (tylko Firefox) */
  obiekt.value = tekst;                                             /* value */
  m_event(obiekt, "input");                                         /* input */
  m_klawisz(obiekt, "keyup",   86, 0,   "KeyV",        true,  0);    /* down V */ 
  m_klawisz(obiekt, "keyup",   17, 0,   "ControlLeft", false, 1);    /* down Ctrl */
}
/* --- /f: m_wklej --- */

Symuluje wykonanie Ctrl+V na inpucie.
Oczywiście obiekt.value = tekst; będziesz musiał sobie zmienić.


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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