输入元素是否有onload事件?

imd*_*hmd 33 javascript

当呈现输入元素或任何其他html元素时,是否可以触发Javascript脚本.应该在html标记内触发此脚本,以便我们能够将"this"传递给js函数.

Pek*_*ica 27

不,没有这样的事件.

但是,<script>直接放在HTML元素之后的标记会产生类似的效果:它将在元素渲染后直接执行:

<input type="text" id="input123" value="Hello World!">

<script>
alert("Input123 is now ready:"+document.getElementById("input123).value);
</script>
Run Code Online (Sandbox Code Playgroud)

但是,在大多数情况下,最好使用文档范围load(或DOMReady或jQuery .ready())来启动任何脚本操作.DOM将完全准备就绪.


Chr*_*isR 25

模拟此类事件的一种方法是创建自定义数据 - *atttribute(HTML-5有效)并将其用作选择器.然后在主javascript代码中,您可以为具有此特定data-XXX属性的任何内容添加选择器,并评估其中的javascript代码.

示例HTML代码:

<div data-onload="sampleFunction('param1', 2)"></div>
Run Code Online (Sandbox Code Playgroud)

示例Javascript代码(使用jQuery).也可以使用普通DOM来查找具有此属性的元素.

/* Find any element which has a 'data-onload' function and load that to simulate an onload. */
$('[data-onload]').each(function(){
    eval($(this).data('onload'));
});
Run Code Online (Sandbox Code Playgroud)

这很好用.我实际上在生产中使用它.

  • 一般来说,使用eval是不好的做法,应尽可能避免使用.Eval可能非常不安全,因为它将运行data-onload属性中的任何代码.您可以使用泛型回调,只需通过`data-onload`传递参数,如http://codepen.io/kevingimbel/pen/0c9366e17a96288ee8a685d6d53a805f (5认同)

Del*_*ani 5

但是,在输入元素标记之后放置的任何脚本都将在输入元素可用的情况下运行,因为它在脚本之前被解析.所以,如果这一切都在体内:

<input id="a">
<script>document.getElementById('a');</script>
Run Code Online (Sandbox Code Playgroud)

无论如何,这一切都会奏效.