Мой нормальный способ выполнения JavaScript трансформирует на множество элементов с помощью JQuery:HTML: OnLoad для элементов без тела
<div class="cow"></div>
<script> $(".cow").doStuff() </script>
Однако эта операция является хрупким и ломким: она работает на предположении, что страница загружается только один раз. Как только вы начнете попадать в Ajax и частичную перезагрузку, этот вид глобального преобразования полностью разрушается. Он также не работает, если сервер хочет сделать другое преобразование для каждого элемента на основе некоторых данных на сервере.
Я знаю фактическое событие onload
для не-body
элементов не работает. Одним из решений является дать все идентификаторы элементов/классы и ссылки на них сразу же с помощью JQuery:
<div id="cow"></div>
<script> $("#cow").doStuff() </script>
Однако, это действительно грязно; Мне это совсем не нравится, отчасти потому, что каждый элемент, который я даю ID, загрязняет глобальное пространство имен. В настоящее время я даю элементу эффективный неконтактный ID
<div id="id877gN0icYtxi"></div>
<script> $("#id877gN0icYtxi").doStuff() </script>
на основе случайных чисел base64. Тем не менее, все это похоже на гигантский взлом: я могу дать элементы onclick
s и onmousedown
s и так просто использовать их соответствующие атрибуты, которые затем вызывают функцию для преобразования данного this
.
Теперь, я знаю onload
не работает. Однако есть ли способ имитировать его функциональность? В частности, я хочу иметь возможность запускать код javascript, ссылающийся на конкретный тег, используя this
без необходимости присваивать им тег ID.
EDIT: По сути, я хочу что-то вроде
<input onclick="alert('moo')"/>
но для OnCreate; мой текущий случай использования для заполнения input
или textarea
с текстом, и я сейчас делаю:
<input id="id877gN0icYtxi"/>
<script>$("#id877gN0icYtxi").val(...)</script>
где ...
различна для каждого поля ввода, и, таким образом, не может быть легко сделать с помощью «глобального» JQuery преобразования , С другой стороны, я не могу просто установить value
или атрибут input
, когда я его создам, так как это может быть textarea
, и я не знаю. Я хочу сделать что-то вроде:
<input onload="$(this).val(...)"/>
Что не работает, но я бы хотел. Опять же, ...
задается сервером и различается для каждого тега input
на странице.
EDIT2:
Я хорошо известно час JQuery, как правило, используется, чтобы сделать весь-документ переходит на множество элементов таким же образом. Дело в том, что в этом случае каждый элемент преобразуется способом, определенным для этого элемента, который продиктован сервером. В конкретном случае использования каждое поле имеет свое содержимое, предварительно заполненное $().val()
, и, естественно, каждое поле будет заполнено различным содержимым. Предоставление каждому элементу уникального Идентификатор и использование JQuery для глобального поиска, чтобы найти этот элемент снова, кажется невероятным окольным способом делать что-то и, конечно же, ломается, когда вы запускаете части Ajaxing своей страницы.
EDIT3:
Короче говоря, я хочу, чтобы иметь возможность написать
<div onload="javascriptFunction(this)"/>
и javascriptFunction()
запускаться при включении <div>
создается (будь то на начальной странице или вставляться через AJAX) и передается <div>
в качестве параметра. Точно так же, как onclick
будет запускать javascriptFunction()
с <div>
в качестве параметра при нажатии на div, я хочу, чтобы то же самое произошло, но когда <div>
был создан/вставлен в DOM.
Я хочу принять любое количество установочных сценариев в <head>
, чтобы это произошло. По причинам, указанным выше, я не хочу добавлять теги <script>
после <div>
или добавить class
или id
в <div>
. Учитывая эти ограничения, что лучше всего сделать для имитации атрибута onload
для элементов без тела?
Не задайте вопрос .. –
Как именно вы намерены идентифицировать тег, который вы пытаетесь решить? Существует несколько способов перевести свои критерии в код, но чтобы помочь вам разобраться в коде, нам нужно сначала знать ваши критерии. – dragon
Этот материал http://docs.jquery.com/Plugins/livequery утверждает, что делает то, что вы хотите: «Live Query также имеет возможность запускать функцию (обратный вызов), когда она соответствует новому элементу и другой функции (обратный вызов) для когда элемент больше не сопоставляется ». Я не тестировал его сам. –