如何获取与DOM元素关联的事件? [英] How to get Events associated with DOM elements?

查看:92
本文介绍了如何获取与DOM元素关联的事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个HTML文档。

可以使用 javascript 事件 >。

  var element = document.forms [i] .elements [j]; 

这样我就可以得到 i / b> th形式,但是我可以得到与元素相关联的事件。

窗体中可以有任意数量的元素。我正在使用 IE 8 。 >


感谢








编辑:


其实我正在尝试将HTML DOM序列化为XML。



我所做的是: / p>

  createXML:function(){

objSerializeDOM.msg + =;
objSerializeDOM.msg + =<?xml version ='1.0'encoding ='UTF-8'?> \\\
\\\
;
//获取文档中的所有表单。
var forms = document.forms;

for(var i = 0; i< forms.length; i ++){
//获取每个表单的所有元素。
elements = document.forms [i] .elements;
objSerializeDOM.msg + =&FORM name = \+ forms [i] .name +\method = \
+ forms [i] .method + \action = \+ forms [i] .action +\> \\\
\\\
;
for(var j = 0; j< elements.length; j ++){
objSerializeDOM.msg + =< +元素[j] .tagName +type = \
+ elements [j] .type +\+name = \
+ elements [j]。 name +\+Value = \
+ elements [j] .value +\/> \\\
;
}
alert(document.forms [i] .elements [1] .event);
}
objSerializeDOM.msg + =\\\
\\\
< / FORM> \\\
\\\
;
alert(objSerializeDOM.msg);
objSerializeDOM.writeToFile(objSerializeDOM.msg);
}

我从中得到的是一个XML:

 <?xml version ='1.0'encoding ='UTF-8'?> 

< FORM name =loginFormmethod =postaction =/ sigma / login.do; jsessionid = E6509E7BA55573AA5386274ABB93F718>

< INPUT type =hiddenname =messageValue =/>
< INPUT type =hiddenname =userActionValue =/>
< INPUT type =textname =userIdValue =/>
< INPUT type =passwordname =passwdValue =/>
< INPUT type =buttonname =buttonValue =Continue/>


< / FORM>

现在假设我有:

 < input tabindex =7name =buttontype =buttonclass =button
style =width:100; height:30Value =Continue onclick ='login()'/>

我现在要做的是在我的XML或任何与onBlur()相关联的事件上获取onClick,



感谢

解决方案

正如Felix在评论中所说,有几种方法可以在对象上注册事件。那么你如何能够将事件附加到一个对象上,并将它们以某种方式序列化到你的xml上取决于它们的注册方式。我会列出一些想法如何让他们进行序列化。



1处理程序在线注册



1.1完全内联代码:

 < INPUT type =hiddenname =messageValue = onclick =alert('hello')/> 

当代码完全内联时,您只需在xml中获取属性并保存。 / p>

2.1内联函数调用



在这种情况下,您必须导出函数的声明。在JavaScript函数中是自己的对象,因此您可以通过调用 myFunc.toString()来获取函数的声明文本。这很困难的部分是要弄清楚,如果这是一个函数调用,声明是要导出的。



2通过属性注册的处理程序



如果您已经通过ie添加了所​​有元素处理程序:

  function myFunc(num){
alert(你的数字是:+ num);
}

document.getElementById('myElement')。onclick = myFunc;

你可以像你已经做的那样迭代你的表单元素,并获得onlick,onmouseover,onblur,on ....属性一个接一个,并保存到xml。在这种情况下,此属性的内容也将是Function Objects,以便在Function对象上保存其实际内容 .toString()



此外,还有一些注册事件处理程序的方法取决于不同的浏览器。所以如果你明确知道你的事件是如何注册的,那么你实际上可以序列化它们。如果你不这样做会很困难。



我希望这有助于你进一步。


I have an HTML document.
It is possible to get the events associated with every Element in a particular FORM element in the document using javascript.

var element = document.forms[i].elements[j];

This way I can get j th element in i th form, But can I get the event associated with the element.
There can be any number of elements in a form.I am using IE 8.


Thanks



EDIT :
Actually I was trying to serialize HTML DOM into XML.

what I did to do this was :

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);
    }

What I am getting from this is an 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>

Now Suppose I have :

<input tabindex="7" name="button" type="button" class="button"
                style="width:100;height:30" Value="Continue" onclick='login()' />

All I want to do now is to get onClick in my XML or any event associated like onBlur() etc.

Thanks

解决方案

As Felix said in his comment, there are several ways to register an event on an object. So how you can get the events attached to an object and serialize them somehow to your xml depends on how they are registered. I will list some thoughts of how you can get them for serialisation.

1 Handlers registered inline

1.1 Completely inline code:

<INPUT  type="hidden"  name="message"   Value =""  onclick="alert('hello')"/>

When the code is completely inline, you can just get the attribute in your xml and save it.

2.1 Inline function call

In this case you would have to export the declaration of the function. In JavaScript Functions are objects itsself so you could actually get the declaration text of your function by invoking myFunc.toString(). The hard part on this would be to figure out, if this is a function call where the declaration hast to be exported or not.

2 Handlers registered through attributes

If you have added all your element Handlers through i.e. :

function myFunc(num){
  alert("Your number is: " + num);
}

document.getElementById('myElement').onclick = myFunc;

you could just iterate your form elements like you already do and get the onlick, onmouseover, onblur, on.... properties all one by one and save them to xml. Also in this case the content of this propertys will be Function Objects as well so to save their actual content you have to do .toString() on the Function object.

In addition there are some other ways to register Event handlers depending on the different Browsers. So if you definetly know how your events are registered, you can actually serialize them. If you don't that's going to be very difficult.

I hope that helps to get you a bit further.

这篇关于如何获取与DOM元素关联的事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆