Невозможно вызвать событие onmouseup для элемента <tr> через консоль JavaScript в Chrome

Невозможно вызвать событие onmouseup для элемента "tr" через консоль Javacript в Chrome.

Элемент похож на этот (не могу поделиться точным кодом извините):

< tr class="one" style="height:20px;" onmouseup="click(event,this)"> Text </tr>

В консоли я сделал следующие шаги:

document.getElementsByClassName("one")[0].onmouseup()

Я получаю ошибку:

Uncaught TypeError: Cannot read property 'metaKey' of undefined
    at Object.i [as click] (filename:linenumber)
    at HTMLTableRowElement.onmouseup (Workbox?ajax:1)
    at <anonymous>:1:45

В прилагаемом исходном файле js в функции i с указанным номером строки проверяется event.metaKey:

    n = b.metaKey || b.ctrlKey

В этой строке отображается ошибка.

Это событие срабатывает, когда я нажимаю его вручную (мышью). Когда я использую команду, чтобы сделать то же самое, она не может работать без ошибок. Из-за этого "metaKey" не передается правильно. Могу ли я передать его по вызову onmouseup()? Есть ли другой путь? В контексте mouseEvents, на что вообще ссылается metakey? По другим вопросам было сказано, что ключ "Win" - это metaKey. Но при ручном нажатии я не нажимаю никакую другую клавишу, только мышь. Как это работает там?

Моя конечная цель здесь - вызвать ту же функцию onmouseup для того же элемента, но с использованием библиотеки селена в Java. Там же я использую JavaScript Executor для элемента, полученного с помощью xpath. Там тоже есть такая же ошибка. Так что, если это работает, то должно работать и там.

Я дважды проверил, что выбирается тот же элемент, а не какой-то другой. Что я могу сделать, чтобы решить проблему?

3 ответа

Решение

Как сказал @teemu в комментарии, то, что вы делаете, - это не событие, а просто вызов функции onmouseup(), Проблема в том, что этот вызов не имеет аргумента события, который называется b в твоем примере так n = b.metaKey || b.ctrlKey является n = undefined.metakey || undefined.ctrlKey

Для создания события mouseup вы используете:

newEvt = new MouseEvent ("mouseup", {
    пузыри: правда,
    можно отменить: правда,
    screenX: <желаемое значение X>,
    screenY: <желаемое значение Y>,
    clientX: <требуемое значение X>,
    clientY: <желаемое значение Y>});

// screenX, screenY, clientX и clientY являются необязательными и по умолчанию равны 0

document.getElementsByClassName("один")[0].dispatchEvent(newEvt);

см. документацию MDN MouseEvent: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent


о metakey они соответствуют windows key или ⌘key на Mac (источник: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/metaKey)

Таким образом, вы можете связать событие с нужными вам данными (чтобы исправить ошибку или по любой другой причине) -

var e = new Event('mouseup');
document.getElementsByClassName("one")[0].trigger(e);

Наверху и наверху


< tr class="one" style="height:20px;" onmouseover ="click('first value','2nd value')"> Text </tr>

и для onmousedown="mouseDown()" onmouseup="mouseUp()"

вот пример

function mouseDown() {
    document.getElementById("myP").style.color = "red";
}

function mouseUp() {
    document.getElementById("myP").style.color = "green";
}
<p id="myP" onmousedown="mouseDown()" onmouseup="mouseUp()">
Click the text! The mouseDown() function is triggered when the mouse button is pressed down over this paragraph, and sets the color of the text to red. The mouseUp() function is triggered when the mouse button is released, and sets the color of the text to green.
</p>

<script>
function mouseDown() {
    document.getElementById("myP").style.color = "red";
}

function mouseUp() {
    document.getElementById("myP").style.color = "green";
}
</script>
Другие вопросы по тегам