JS: Применить multi event выполняют ту же функцию для одного элемента [duplicate]

Связанный .lib-файл связан с .dll

У меня была такая же проблема. Скажем, у меня есть проекты MyProject и TestProject. Я эффективно связал файл lib для MyProject с TestProject. Однако этот файл lib был создан, так как была построена DLL для MyProject. Кроме того, я не содержал исходный код для всех методов в MyProject, но только доступ к точкам входа DLL.

Чтобы решить проблему, я построил MyProject как LIB и связал TestProject с этим .lib-файлом (скопируйте вложенный файл .lib в папку TestProject). Затем я смогу снова создать MyProject как DLL. Он компилируется, поскольку lib, с которым связан TestProject, содержит код для всех методов в классах MyProject.

27
задан khellang 30 August 2013 в 14:57
поделиться

7 ответов

17
ответ дан KooiInc 31 August 2018 в 13:23
поделиться

Я знаю, что это старый вопрос, но я думал, что некоторые могут найти этот подход полезным; он может быть применен к любому одинаково повторяющемуся коду:

ES6

['click','ontouchstart'].forEach( evt => 
    element.addEventListener(evt, dosomething, false)
);

ES5

['click','ontouchstart'].forEach( function(evt) {
    element.addEventListener(evt, dosomething, false);
});
44
ответ дан Colin D 31 August 2018 в 13:23
поделиться

Вы можете просто определить функцию и передать ее. Анонимные функции никоим образом не являются особенными, все функции могут передаваться как значения.

var elem = document.getElementById('first');

elem.addEventListener('touchstart', handler, false);
elem.addEventListener('click', handler, false);

function handler(event) {
    do_something();
}
7
ответ дан Esailija 31 August 2018 в 13:23
поделиться

document.getElementById('first').addEventListener('touchstart',myFunction);

document.getElementById('first').addEventListener('click',myFunction);
    
function myFunction(e){
  e.preventDefault();e.stopPropagation()
  do_something();
}    

Вы должны использовать e.stopPropagation(), потому что если нет, ваша функция дважды будет запущена на мобильном устройстве

0
ответ дан John Balvin Arias 31 August 2018 в 13:23
поделиться

Если ваша функция do_something фактически ничего не делает с любыми заданными аргументами, вы можете просто передать ее как обработчик события.

var first = document.getElementById('first');
first.addEventListener('touchstart', do_something, false);
first.addEventListener('click', do_something, false);
7
ответ дан Mattias Buelens 31 August 2018 в 13:23
поделиться

Эта мини-библиотека javascript (1.3 KB) может делать все это

https://github.com/Norair1997/norjs/

nor.event(["#first"], ["touchstart", "click"], [doSomething, doSomething]);
-1
ответ дан Norair 31 August 2018 в 13:23
поделиться

Для большого количества событий это может помочь:

var element = document.getElementById("myId");
var myEvents = "click touchstart touchend".split(" ");
var handler = function (e) {
    do something
};

for (var i=0, len = myEvents.length; i < len; i++) {
    element.addEventListener(myEvents[i], handler, false);
}

Обновление 06/2017:

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

const element = document.querySelector("#myId");

function handleEvent(e) {
    // do something
}
// I prefer string.split because it makes editing the event list slightly easier

"click touchstart touchend touchmove".split(" ")
    .map(name => element.addEventListener(name, handleEvent, false));

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

const el = document.querySelector("#myId");

const eventHandler = {
    // called for each event on this element
    handleEvent(evt) {
        switch (evt.type) {
            case "click":
            case "touchstart":
                // click and touchstart share click handler
                this.handleClick(e);
                break;
            case "touchend":
                this.handleTouchend(e);
                break;
            default:
                this.handleDefault(e);
        }
    },
    handleClick(e) {
        // do something
    },
    handleTouchend(e) {
        // do something different
    },
    handleDefault(e) {
        console.log("unhandled event: %s", e.type);
    }
}

el.addEventListener(eventHandler);
7
ответ дан Torsten Walter 31 August 2018 в 13:23
поделиться
Другие вопросы по тегам:

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