Как проверить, поддерживается ли onpropertychange или нет? - PullRequest
5 голосов
/ 03 октября 2011

Я хотел бы знать, изменился ли элемент ввода, я узнал, что могу слушать onpropertychange в IE и oninput в других браузерах.
Вот мой код:

var _addChangedProperty = function(input){
    input.changed = false;
    var oninput = function(){
        this.changed = !!this.value;
        if(this.changed){
            this.style.color = "black";
        }   
    };  
    input.onpropertychange = input.oninput = oninput;
};  

Теперь я хотел бы изменить input.onpropertychange = input.oninput = oninput; на addEventListerner и attachEvent, мне нужно проверить, поддерживается ли событие onpropertychange, как я могу это сделать (без определения браузера)?

1 Ответ

4 голосов
/ 03 октября 2011

Вы можете проверить с помощью оператора in:

"onpropertychange" in input

Этот вид тестирования функций не работает в более старых версиях Firefox, которые сообщают о событии false для свойств обработчика событий, соответствующих событиямкоторые существуют, но это не проблема здесь, потому что Firefox в настоящее время не поддерживает событие propertychange и вряд ли будет в будущем.

Вот некоторые предпосылки: http://perfectionkills.com/detecting-event-support-without-browser-sniffing/

Еще один момент: вам нужны отдельные функции для обработки событий propertychange и input, потому что в обработчике propertychange вам нужно проверить, изменилось ли свойство value.В противном случае вы в конечном итоге будете обрабатывать изменения в любом свойстве ввода.

input.onpropertychange = function(evt) {
    evt = evt || window.event;
    if (evt.propertyName == "value") {
        // Do stuff here
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...