Ctrl + клик в JavaScript

Я широко просматривал Интернет по этой проблеме, включая stackru. Моя проблема в том, что у меня есть набор 'li', и я хочу добавить несколько 'li' в массив, когда я использую ctrl+ щелчок жестом. Я продолжаю получать (е) не определено. Я нашел это: Обнаружить клавиши CTRL и SHIFT без события нажатия клавиши?

Но предоставленный ответ, который, кажется, сработал для многих, не для меня. Всякий раз, когда я использую это, даже в качестве единственного элемента в моем скрипте, firebug не отвечает в консоли, но я получаю: " ReferenceError: e не определено". Я использую Firefox.

Моя самая большая проблема состоит в том, чтобы заставить это добавить это в функцию, и функция, которая запускается как событие, может различать нажатие ctrl+click и обычное нажатие.

Любой опыт, чтобы помочь мне? Ванильный Javascript предпочтительнее.

Смысл этого упражнения заключается в удалении LI при нажатии, но я хочу удалить несколько сразу, если я удерживаю Ctrl. Возможно, храня их в массиве. РЕДАКТИРОВАТЬ: некоторый код

    <ul id = "ulItem">
<li>item1</li>
<li>item2</li>
<li>item3</li>
<li>item4</li>
</ul>

<script>

window.onload = function(){
var ulItem = document.getElementById("ulItem"); //gets UL with the "ulItem" ID.
var ulList = ulItem.getElementsByTagName("li"); //gets ulItem's "li" in an array.



///prepareLI function.///
var prepareLi = function(){

for(i = 0; i < ulList.length; i++){

ulList[i].addEventListener('click', elementClick);
}
}

//adds the same event listener to each of the "li" inside "UlList" array. Each activated by a click.




///elementClick function.///

var elementClick = function(){

ulItem.removeChild(this);

} //if this is a child of parent, UlList, remove it.

prepareLi();
}

2 ответа

Решение

Я думаю, что нашел альтернативный способ сделать это. Если вы хотите эмулировать нажатие Ctrl+, чтобы выбрать несколько объектов, для меня это сработало:

сделать две переменные, loader и loaderArray:

var loader = 1;
var loaderArray = [];

установить событие документа:

document.addEventListener('mousedown', MultiSelect);

и событие клика по элементу:

document.addEventListener('click', singleSelect);

Убедитесь, что событие окна является mousedown пункт, также, что Ctrl определяется как keyCode == 17, Цифровая часть ОЧЕНЬ важна. Вот код, который я использовал:

    function loadArray(e) {

        if (e.keyCode === 17) {

            //console.log("key down");

            loader = 2;

        };

    }

Затем я установил отдельную функцию для события singleSelect, заявив, что если loader ==2использовать loaderArray.push(this) а не нормальный способ делать вещи, когда loader == 1, Затем массив загрузчика собирает переменные, и вы можете делать с массивом все, что захотите, используя for() или какой-то другой цикл.

Теперь всякий раз, когда я нажимаю клавишу Ctrl, указатель мыши на документе превращает переменную загрузчика в 2, и таким образом можно различить нажатие Ctrl+ и обычное нажатие.

Спасибо всем, кто помог, и я надеюсь, что это поможет другим!:)

Браузер правильно говорит, что вы никогда не объявляли e, а пример в Обнаружение клавиш CTRL и SHIFT без события нажатия клавиши? определил eобъявив его формальным аргументом функции слушателя.

var elementClick = function(e){
    if(e.ctrlKey) {
        ulItem.removeChild(this);
    }
}

Обратите внимание на использование function(e){ скорее, чем function(){

Другие вопросы по тегам