如何获取与DOM元素相关的事件?

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.

谢谢

Chr*_*ris 4

正如 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()在函数对象上执行操作。

此外,根据不同的浏览器,还有一些其他方法来注册事件处理程序。因此,如果您明确知道事件是如何注册的,那么您实际上可以序列化它们。如果你不这样做,那将会非常困难。

我希望这有助于您走得更远。