js - & ldquo; блок & rdquo; или & ldquo; перенаправление & rdquo; все действия клавиатуры и мыши

Давайте перепишем ваш код следующим образом:

x = 1
y = [x]
z = y * 4

myList = [z] * 3

После этого запустите следующий код, чтобы сделать все более понятным. Что делает код, в основном печатает id s полученных объектов, которые

Вернуть «идентификатор» объекта

и поможет нам идентифицировать их и проанализировать, что происходит:

print("myList:")
for i, subList in enumerate(myList):
    print("\t[{}]: {}".format(i, id(subList)))
    for j, elem in enumerate(subList):
        print("\t\t[{}]: {}".format(j, id(elem)))

И вы получите следующий результат:

x: 1
y: [1]
z: [1, 1, 1, 1]
myList:
    [0]: 4300763792
        [0]: 4298171528
        [1]: 4298171528
        [2]: 4298171528
        [3]: 4298171528
    [1]: 4300763792
        [0]: 4298171528
        [1]: 4298171528
        [2]: 4298171528
        [3]: 4298171528
    [2]: 4300763792
        [0]: 4298171528
        [1]: 4298171528
        [2]: 4298171528
        [3]: 4298171528

Итак, теперь давайте шаг за шагом. У вас есть x, который является 1, и единственным списком элементов y, содержащим x. Ваш первый шаг - y * 4, который даст вам новый список z, который в основном [x, x, x, x], т. Е. Создает новый список, который будет содержать 4 элемента, которые являются ссылками на исходный объект x. Чистый шаг очень похож. В основном вы делаете z * 3, который является [[x, x, x, x]] * 3 и возвращает [[x, x, x, x], [x, x, x, x], [x, x, x, x]] по той же причине, что и для первого шага.

1
задан Eduardo Lucio 24 March 2019 в 05:39
поделиться

2 ответа

Просто используйте preventDefault:

var events = "mousedown mouseup click dblclick mousemove mouseover mouseout mouseenter mouseleave scroll contextmenu keydown keypress keyup";
events.split(" ").forEach(event => document.addEventListener(event, e => e.preventDefault()));
<p>This is some example text. Please ignore it.</p>

Попробуйте выделить текст в приведенном выше фрагменте кода, затем отмените выбор Это.

0
ответ дан Jack Bashford 24 March 2019 в 05:39
поделиться

Вы можете прослушивать события на уровне документа.

[...events].forEach(e => {
  document.addEventListener(e, (ev) => {
    ev.preventDefault()
    ... 
  })
}) 

Но определенно есть запах кода ... Я сомневаюсь, что перехват всех событий - это хорошая идея. Когда-либо.

0
ответ дан Zach Smith 24 March 2019 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: