Это uuid / jQuery.expando, что jQuery добавляет к каждому элементу DOM, с которым он взаимодействует, для работы с утечками памяти браузера.
Код старого стиля ждал, когда window.onunload отвяжет данные Javascript из тегов DOM для предотвращения утечек памяти. JQuery избегает этого, используя простое число (например, в примере кода) в атрибуте, а затем сохраняя хэш-файл в Javascript тегов и номеров (который он вызывает uuid).
Имя странного атрибута это значение jQuery.expando, которое вы можете легко искать в коде и видеть, что каждый раз он устанавливается на случайное значение. Это делается для того, чтобы несколько копий jQuery могли сосуществовать на странице, не мешая друг другу.
Я не знаю, какой прецедент мне понадобился, когда мне нужно больше, чем один jQuery на на той же странице, и я подозреваю, что вам тоже не нужна эта функциональность - вы можете легко решить эту проблему, просто исключив эту функцию. Измените код, чтобы установить jQuery.expando на какое-то жестко закодированное значение, например «jquery», вместо случайного числа, и вам хорошо идти.
Будьте осторожны, чтобы никогда не использовать jQuery дважды в на той же странице! Хотя делать это случайно вводит много других странных побочных эффектов, а также (как и повторное использование $), так что точка может быть спорным.
Я иду в немного более подробно о jQuery.expando / UUID в этот вопрос: Почему JQuery не демонстрирует свою функциональность UUID?
В этой записи вы заметите, что значение атрибута является случайным-иш - это счетчик основанный на том, с какими мечами уже был связан jQuery. Если ваш код требует, чтобы значение атрибута было согласованным, вы все равно можете столкнуться с проблемами.
Обновить
Вам нужно будет изменить источник jquery. Например, 1.6.2: http://code.jquery.com/jquery-1.6.2.js
Включает следующее:
jQuery.extend({
cache: {},
// Please use with caution
uuid: 0,
// Unique for each copy of jQuery on the page
// Non-digits removed to match rinlinejQuery
expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
Вы можете изменить линию expando следующим образом:
// Does not support multiple copies of jQuery on the same page!
// 0 included to match rinlinejQuery (/jQuery\d+/)
expando: "jQuery0",
попытайтесь получить событие, используя переданный параметр (в данном случае он называется e
). Я тестировал это, и оба window.event
, и e
поддерживаются в chrome.
попробуйте проверить для обоих, в зависимости от того, что существует
var ex = {
exampl: function(e){
console.log(window.event);
console.log(e);
//check if we have "e" or "window.event" and use them as "evt"
var evt = e || window.event
}
}
У Chrome тоже нет его. Вместо того, чтобы каждый триггер события передавал свой собственный объект события, IE сбросил свойства в window.event и передал это. Это сработало, потому что вы когда-либо имели дело с одним событием за раз. То, что должен иметь каждый браузер, - это window.Event, который является фактическим конструктором для объектов событий. Если вы видите «window.event» где угодно, кроме IE8 и ниже, попробуйте открыть консоль на пустой вкладке и зарегистрировать или предупредить ее там. Скорее всего, это добавление его вручную на странице, на которую вы смотрите.
Если вы посмотрите на нормализующий код кроссбраузера для обработчиков событий, вы часто увидите:
if(!e){ e = window.event; }
Это событие нормализует код обработки старых версий IE. В современных браузерах e должен быть собственным объектом, передаваемым через аргументы, а не ссылкой на свойство окна.
window.event
не является особенностью, это ошибка!
Цитата MDN :
window.event
является запатентованным Microsoft Internet Explorer, доступное только при вызове обработчика событий DOM. Его значение - это объект Event, который в настоящее время обрабатывается.И самое главное:
Не является частью какой-либо спецификации.
window.event
является нестандартным, поэтому не ожидайте, что будут поддерживаться любые браузеры .Первым параметром функции обратного вызова в
element.addEventListener()
является объектEvent
, Используйте его вместоwindow.event
.
Поскольку window.event
не существует в Firefox. Это потому, что браузер имеет разные модели событий, и вам придется иметь дело с их различиями или использовать библиотеку, такую как jQuery, чтобы не иметь дело со всеми различиями между браузерами. Добро пожаловать в DOM.
exampl:function(e) {if (window.event && !e) e=window.event;var ref=e.target||e.srcElement;}
. – anony_root 22 March 2012 в 00:11e
? почему бы вам не просто использоватьe
всегда – Simon_Weaver 31 July 2015 в 21:35