EMM*_*EMM 11 javascript dom javascript-events
我有一个HTML文档.
可以使用javascript获取与文档中特定FORM元素中的每个元素相关联的事件.
var element = document.forms[i].elements[j];
Run Code Online (Sandbox Code Playgroud)
这样我就能得到第i个形式的第j个元素,但是我可以得到与元素相关的事件.
表单中可以有任意数量的元素.我使用的是IE 8.
谢谢
编辑:
实际上我试图将HTML DOM序列化为XML.
我做的是:
createXML : function() {
objSerializeDOM.msg += "";
objSerializeDOM.msg += "<?xml version='1.0' encoding='UTF-8'?>\n\n";
// Get all the forms in a document.
var forms = document.forms;
for ( var i = 0; i < forms.length; i++) {
// Get all the elements on per form basis.
elements = document.forms[i].elements;
objSerializeDOM.msg += "<FORM name=\"" + forms[i].name + "\" method=\""
+ forms[i].method + "\" action=\"" + forms[i].action + "\">\n\n";
for ( var j = 0; j < elements.length; j++) {
objSerializeDOM.msg += " <" + elements[j].tagName + " type=\""
+ elements[j].type + "\"" + " name=\""
+ elements[j].name + "\"" + " Value =\""
+ elements[j].value + "\" />\n";
}
alert(document.forms[i].elements[1].event);
}
objSerializeDOM.msg += "\n\n</FORM>\n\n";
alert(objSerializeDOM.msg);
objSerializeDOM.writeToFile(objSerializeDOM.msg);
}
Run Code Online (Sandbox Code Playgroud)
我从这里得到的是一个XML:
<?xml version='1.0' encoding='UTF-8'?>
<FORM name="loginForm" method="post" action="/sigma/login.do;jsessionid=E6509E7BA55573AA5386274ABB93F718">
<INPUT type="hidden" name="message" Value ="" />
<INPUT type="hidden" name="userAction" Value ="" />
<INPUT type="text" name="userId" Value ="" />
<INPUT type="password" name="passwd" Value ="" />
<INPUT type="button" name="button" Value ="Continue" />
</FORM>
Run Code Online (Sandbox Code Playgroud)
现在假设我有:
<input tabindex="7" name="button" type="button" class="button"
style="width:100;height:30" Value="Continue" onclick='login()' />
Run Code Online (Sandbox Code Playgroud)
我现在要做的就是在我的XML或任何与onBlur()等相关的事件中获取onClick.
谢谢
正如 Felix 在评论中所说,有多种方法可以在对象上注册事件。因此,如何获取附加到对象的事件并以某种方式将它们序列化到 xml 取决于它们的注册方式。我将列出一些关于如何将它们连载的想法。
1 内联注册处理程序
1.1 完全内联代码:
<INPUT type="hidden" name="message" Value ="" onclick="alert('hello')"/>
Run Code Online (Sandbox Code Playgroud)
当代码完全内联时,您只需获取 xml 中的属性并保存即可。
2.1 内联函数调用
在这种情况下,您必须导出函数的声明。在 JavaScript 中,函数本身就是对象,因此您实际上可以通过调用 来获取函数的声明文本myFunc.toString()。困难的部分是弄清楚这是否是一个必须导出声明的函数调用。
2 通过属性注册的处理程序
如果您已通过 ie 添加所有元素处理程序:
function myFunc(num){
alert("Your number is: " + num);
}
document.getElementById('myElement').onclick = myFunc;
Run Code Online (Sandbox Code Playgroud)
你可以像你已经做的那样迭代你的表单元素,并一一获取 onlick、onmouseover、onblur、on... 属性并将它们保存到 xml。此外,在这种情况下,此属性的内容也将是函数对象,因此要保存它们的实际内容,您必须.toString()在函数对象上执行操作。
此外,根据不同的浏览器,还有一些其他方法来注册事件处理程序。因此,如果您明确知道事件是如何注册的,那么您实际上可以序列化它们。如果你不这样做,那将会非常困难。
我希望这有助于您走得更远。