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(){