我通常使用JQuery在许多元素上执行JavaScript转换的方法:
<div class="cow"></div>
<script> $(".cow").doStuff() </script>
然而,这种操作很脆弱:它假设页面只加载一次。一旦涉及到 Ajax 和部分重新加载,这种全局转换就会完全崩溃。如果服务器想基于某些服务器端数据对每个元素进行不同的转换,它也无法工作。
我知道非
body
元素的实际 onload
事件不起作用。一个解决方案是给所有元素提供 ID/Class 并立即使用 JQuery 引用它们。<div id="cow"></div>
<script> $("#cow").doStuff() </script>
然而,这真的很混乱;我一点也不喜欢它,部分原因是每个我给一个ID的元素都会污染全局的I命名空间。目前,我正在为元素赋予一个有效的不可冲突的ID。
<div id="id877gN0icYtxi"></div>
<script> $("#id877gN0icYtxi").doStuff() </script>
基于随机的base64数字。然而,这一切似乎都像一个巨大的黑客行为:我可以简单地使用它们各自的属性给元素添加onclick
和onmousedown
等,然后调用一个函数来转换给定的this
。
现在,我知道onload
不起作用。然而,有没有办法模拟它的功能?具体地说,我想能够运行引用特定标记的javascript代码,使用this
而不必为它们分配ID。
编辑:本质上,我想要类似于:
<input onclick="alert('moo')"/>
但对于oncreate而言,我的当前用例是填充一个input
或textarea
文本框,我目前的做法是:
<input id="id877gN0icYtxi"/>
<script>$("#id877gN0icYtxi").val(...)</script>
每个输入框的...
都不同,因此无法使用“全局”jquery转换轻松完成。另一方面,我不能在创建输入框时仅设置value
或属性,因为它可能是textarea
,我不知道。我想做这样的事情:
<input onload="$(this).val(...)"/>
这种方法不能正常工作,但我希望能够。再次提醒,...
是由服务器设置的,并且对页面上每个input
标签都不同。
编辑2:
我很清楚JQuery通常用于以相同方式对许多元素进行整个文档转换的情况。问题在于,在这种情况下,每个元素都以与该元素特定的方式进行转换,由服务器指定。具体用例是通过$().val()
预填充每个字段的内容,自然每个字段将填充不同的内容。给每个元素一个唯一的 ID,并使用JQuery进行全局搜索来重新查找该元素似乎是一种非常迂回的方法,并且当您开始Ajax加载页面的某些部分时,它当然会出现问题。
编辑3:
简而言之,我想要能够编写以下内容:
<div onload="javascriptFunction(this)"/>
我希望当创建
<div>
时(无论是在初始页面上还是通过ajax插入),能够运行 javascriptFunction()
并将 <div>
作为参数传递。就像当单击 <div>
时,onclick
将以 <div>
作为参数运行 javascriptFunction()
一样,我希望在创建/插入 <div>
到DOM时发生相同的事情。我愿意在
<head>
中接受任何数量的设置脚本,以实现此目的。出于上述原因,我不愿在<div>
之后添加任何<script>
标签,也不愿向<div>
添加class
或id
。在这些限制下,如何模拟非主体元素的onload
属性是最好的呢?
onclick="alert(this)"
是一个在没有ID的情况下识别我正在处理的标签的示例。我想要类似的东西来引用元素在加载时,而不仅仅是在单击时。 - Li Haoyijquery.live()
已被弃用,请尝试使用jquery.on()
。在这种情况下,$('document').on('click', 'a', handler)
。 - dragon