Поддержка размытия в Chrome / Safari в jquery - PullRequest
2 голосов
/ 24 ноября 2010

Я пытаюсь определить, когда поле ввода загрузки файла было обновлено. В IE & FF я могу сделать это, если я использую blur (), но для Chrome мне нужно использовать change (). Поскольку Chrome (и я считаю, что safari) не вызывает событие размытия, есть ли свойство в объекте jquery.supports, чтобы проверить это, или мне нужно использовать устаревший объект .browser?

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

<html>
    <head>
        <script src="jquery-1.4.3.min.js" type="text/javascript"></script>
        <script type="text/javascript">
        $(document).ready(function () {
            $('#test-input').change(function () { alert('changed'); });
            $('#test-input').blur(function () { alert('blurred'); });
            });
        </script>
    </head>
    <body>
        <input type="file" id="test-input">
    </body>
</html>

1 Ответ

0 голосов
/ 04 января 2012

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

var isEventSupported = function(eventName) { //Function to detect supported events
var el = document.createElement('div');
    eventName = 'on' + eventName;
    var isSupported = (eventName in el);
    if (!isSupported) {
        el.setAttribute(eventName, 'return;');
        isSupported = typeof el[eventName] == 'function';
        }
    el = null;
    return isSupported;
    }

После этого определите переменную, которая будет содержать ваше событие.:

var ChangeOrBlur = (isEventSupported('blur')) ? 'blur' : 'change'; //with change as your default

Затем свяжите свою функцию с тем, чем является ваше предварительно обработанное событие:

$('#test-input').bind(ChangeOrBlur, function(){alert(ChangeOrBlur);});

Дайте мне знать, как это работает для нас ...

...