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