JQuery addeventListener. объект не поддерживает это свойство или метод [duplicate]

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

113
задан ravi404 8 January 2014 в 10:21
поделиться

9 ответов

Попробуйте:

if (_checkbox.addEventListener) {
    _checkbox.addEventListener("click", setCheckedValues, false);
}
else {
    _checkbox.attachEvent("onclick", setCheckedValues);
}

Обновление :: Для версий Internet Explorer до IE9, метод attachEvent должен использоваться для регистрации указанного прослушивателя в EventTarget вызывается, для других следует использовать addEventListener .

211
ответ дан Sudhir Bastakoti 18 August 2018 в 18:24
поделиться
  • 1
    Описание того, почему это должно быть использовано, улучшит ответ. – dkris 28 January 2015 в 13:48
  • 2
    @dkris добавил краткое описание в качестве пояснения, я надеюсь, что это делает вещи немного яснее .. :) – Sudhir Bastakoti 28 January 2015 в 15:03

Вы можете использовать следующую функцию addEvent () для добавления событий для большинства вещей, но обратите внимание, что для XMLHttpRequest if (el.attachEvent) не будет работать в IE8, потому что она не поддерживает XMLHttpRequest.attachEvent(), поэтому вам нужно использовать XMLHttpRequest.onload = function() {}.

function addEvent(el, e, f) {
    if (el.attachEvent) {
        return el.attachEvent('on'+e, f);
    }
    else {
        return el.addEventListener(e, f, false);
    }
}

var ajax = new XMLHttpRequest();
ajax.onload = function(e) {
}
2
ответ дан Artjom B. 18 August 2018 в 18:24
поделиться

Я выбрал быстрый Polyfill, основанный на приведенных выше ответах:

//# Polyfill
window.addEventListener = window.addEventListener || function (e, f) { window.attachEvent('on' + e, f); };

//# Standard usage
window.addEventListener("message", function(){ /*...*/ }, false);

Конечно, как и ответы выше, это не гарантирует существование window.attachEvent, что может или не может быть проблемой.

2
ответ дан Campbeln 18 August 2018 в 18:24
поделиться

Вы должны использовать attachEvent в версиях IE до IE9. Определите, определен ли addEventListener, и используйте attachEvent, если это не так:

if(_checkbox.addEventListener)
    _checkbox.addEventListener("click",setCheckedValues,false);
else
    _checkbox.attachEvent("onclick",setCheckedValues);
//                         ^^ -- onclick, not click

Обратите внимание, что IE11 удалит attachEvent .

См. Также:

43
ответ дан groovecoder 18 August 2018 в 18:24
поделиться

Mayb проще (и имеет большую производительность), если вы делегируете обработку события другому элементу, например вашей таблице

$('idOfYourTable').on("click", "input:checkbox", function(){

});

, таким образом у вас будет только один обработчик событий, и это будет работа также для вновь добавленных элементов. Для этого требуется jQuery> = 1.7

В противном случае используйте делегат ()

$('idOfYourTable').delegate("input:checkbox", "click", function(){

});
2
ответ дан Nicola Peluchetti 18 August 2018 в 18:24
поделиться

Если вы используете jQuery, вы можете написать:

$( _checkbox ).click( function( e ){ /*process event here*/ } )
0
ответ дан philipp 18 August 2018 в 18:24
поделиться
if (document.addEventListener) {
    document.addEventListener("click", attachEvent, false);
}
else {
    document.attachEvent("onclick", attachEvent);
}
function attachEvent(ev) {
    var target = ev.target || ev.srcElement;
    // custom code
}
0
ответ дан Pramod Kumar 18 August 2018 в 18:24
поделиться
  • 1
    гораздо лучше показать, что такое средство кода или добавить некоторые заметки. благодаря – toha 6 April 2017 в 08:04

Это также простое решение для кроссбраузеров:

var addEvent =  window.attachEvent||window.addEventListener;
var event = window.attachEvent ? 'onclick' : 'click';
addEvent(event, function(){
    alert('Hello!')
});

Вместо «щелчка» может быть любое событие, конечно.

13
ответ дан Sergey Onishchenko 18 August 2018 в 18:24
поделиться
  • 1
    +1, я думаю, что это умное решение! Третий аргумент addEventListener является необязательным, так что это может быть хорошим решением, и это лучше, чем ветви if-else. Но в этом случае _checkbox является целевым элементом, а не window. :) Итак, возможно, вы могли бы создать функцию, в которой целью события является другой аргумент. – Sk8erPeter 19 May 2013 в 00:09
  • 2
    О, я слишком рано встал ... :) Я получаю & quot; TypeError: Незаконный вызов & quot; в Chrome, если я пытаюсь вызвать псевдонимы для целевых элементов событий addEventListener - см. Этот раздел: stackoverflow.com/questions/1007340/… . Таким образом, для объекта window он работает правильно, но не работает для других узлов внутри документа. Таким образом, ваше предложенное наложение не верно для случая, упомянутого в исходном вопросе! Каким будет ваш обход? – Sk8erPeter 19 May 2013 в 00:59

IE не поддерживает addEventListener до версии 9, поэтому вы должны использовать attachEvent, вот пример:

if (!someElement.addEventListener) {
    _checkbox.attachEvent("onclick", setCheckedValues);
}
else {
    _checkbox.addEventListener("click", setCheckedValues, false);
}
3
ответ дан ticky 18 August 2018 в 18:24
поделиться
Другие вопросы по тегам:

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