#javascript #function #autocomplete
#javascript #функция #автозаполнение
Вопрос:
После нескольких обновлений FireFox и Chrome, похоже, у меня есть функция, которая больше не работает (в JavaScript). Имя функции — автозаполнение, например:
function autocomplete() {
alert("autocomplete!");
}
По-видимому, браузерам больше не нравится это имя функции, поскольку вызов функции игнорируется. Я попытался переписать это следующим образом:
var autocomplete = function() {
alert("autocomplete!");
};
Но это мне не поможет. Однако изменение имени могло бы. Но я не хочу менять имя везде, где это используется. Может быть, у кого-нибудь из вас есть решение?
Редактировать: использование продемонстрировано в следующей скрипке: http://jsfiddle.net/P43xs / Я пытаюсь запустить функцию по событию.
Комментарии:
1. jsfiddle.net/UwG4e — мой хром с тобой не согласен.
2. Это работает даже в IE…
3. Невозможно воспроизвести проблему. Есть ли ошибка в консоли JavaScript? Что-то еще не так с кодом? Когда вы его отлаживаете, где / как происходит сбой? В имени вашей функции нет ничего плохого, должно быть, что-то еще не так.
4. @putvande: что бы это изменило? jsfiddle.net/UwG4e/1
5. Подсказка: когда вы предполагаете, что весь ваш код должен быть правильным и что компилятор / интерпретатор должен быть поврежден, вы обычно ошибаетесь.
Ответ №1:
РЕШЕНИЕ:
onclick="autocomplete();" // --> does not work
onclick="window.autocomplete();" // --> works
Итак, при вызове функции автозаполнения просто переместите ее в window, а затем она работает и показывает предупреждение (попробовано в вашей скрипке)
Причина:
Входные элементы имеют атрибут с именем «автозаполнение», поэтому, когда вы упоминаете onclick="autocomplete();"
, внутренне он вычисляется autocomplete===this.autocomplete
и, следовательно, ничего не делает. (‘this’ в текущем контексте является элементом ввода).
Итак, когда вы ограничиваете его window.autocomplete()
, он указывает на функцию автозаполнения, которую вы определили.
Комментарии:
1. Моя функция отображается в консоли, хотя она не выполняется через событие.
Ответ №2:
Я могу воспроизвести это в Chrome 35.
Я создал вторую скрипку с обходным путем: http://jsfiddle.net/5m7UD/1 /
<input type="button" onclick="autocomplete();" value="Click me!" />
<input type="button" onclick="whatever();" value="Me too please!" />
<input type="button" id="id1" value="Second attempt" />
с помощью этого скрипта:
console.log(autocomplete)
function autocomplete() {
alert("This doesn't work, only in IE compatible mode or other, lder browsers :(");
}
function whatever() {
alert("This works, obviously...");
eval("console.log(autocomplete.toString())");
}
document.getElementById('id1').onclick = autocomplete;
Последняя строка работает. Интересно видеть, что первая кнопка ввода не работает, несмотря на то, что я вижу undefined
в консоли, когда запускаю этот скрипт, и eval
печатает тело функции, определенной выше.
(Я использую eval
, чтобы убедиться, что код не может просто сохранить ссылку на исходную функцию).
Когда я запускаю код и нажимаю кнопку, я вижу эту ошибку в консоли: Uncaught TypeError: string is not a function
в строке, где определена кнопка (т. Е. Для onclick="autocomplete();"
), Поэтому ей действительно не нравится HTML.
Комментарии:
1. Это может быть связано с тем, что браузер пытается связать его с атрибутом автозаполнения для поля ввода. Я попытался использовать window.autocomplete(); и тогда все работает нормально. (Странно !!)
2. Да, window.autocomplete() или настройка события onclick с помощью JavaScript делает свое дело, хотя его нужно менять везде (разные страницы используют один и тот же файл JavaScript). Я думаю, что лучшее решение — накрутить себя и везде менять имя функции. Спасибо всем, что помогли мне. Надеюсь, мы помогли другим тоже сейчас и в будущем.
3. @LaVomit: Подумайте о том, чтобы задать вопрос в группе поддержки Chrome по адресу productforums.google.com/forum /#!категории/chrome