Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript动态设置属性_Javascript_Javascript Events - Fatal编程技术网

javascript动态设置属性

javascript动态设置属性,javascript,javascript-events,Javascript,Javascript Events,我正在尝试将事件动态应用于我的应用程序的元素 当我使用onclick时,我得到一个弹出警报 el.setAttribute('onclick', 'alert("hi")',0); 当我尝试使用onkeypress时,什么都没有发生 el.setAttribute('onkeypress', 'alert("Hi");',0); 我真的需要有按键功能。有什么我做得不对吗?setAttribute不是实现我正在做的事情的最佳方式吗?如果是这样的话,除了在特定元素上动态设置事件,我还有什么选择

我正在尝试将事件动态应用于我的应用程序的元素

当我使用onclick时,我得到一个弹出警报

el.setAttribute('onclick', 'alert("hi")',0);
当我尝试使用onkeypress时,什么都没有发生

el.setAttribute('onkeypress', 'alert("Hi");',0); 
我真的需要有按键功能。有什么我做得不对吗?setAttribute不是实现我正在做的事情的最佳方式吗?如果是这样的话,除了在特定元素上动态设置事件,我还有什么选择

更新:

当我这样做时,请回答以下几个问题:

el.setAttribute('onkeypress','numericOverride(this)',0);
当我查看Firebug中的源代码时,我看到以下内容:

<div id="objSCR" class="txtbox" onmousedown="pfocus(this, '', '');" style="color:#0000FF; width:62px; height:12px; top:76px; left:120px; text-align:right; color:#0000FF;" ptmulti="false" pttype="E" ptlayndx="4" ptdisp="false" ppopup="" plength="12" onchange="numericOverride(this)">4000.00</div>
el.onchange = function() { numericOverride(this) } 
当我尝试执行以下操作时:

<div id="objSCR" class="txtbox" onmousedown="pfocus(this, '', '');" style="color:#0000FF; width:62px; height:12px; top:76px; left:120px; text-align:right; color:#0000FF;" ptmulti="false" pttype="E" ptlayndx="4" ptdisp="false" ppopup="" plength="12" onchange="numericOverride(this)">4000.00</div>
el.onchange = function() { numericOverride(this) } 

没有向div添加任何内容,我也没有从函数中得到任何结果。

您应该以正确的方式设置事件侦听器:

el.onkeypress = function() { alert("HI") }

您应该以正确的方式设置事件侦听器:

el.onkeypress = function() { alert("HI") }

您试图将事件处理程序附加到的元素类型是什么?onkeypress事件仅由以下标记支持:

<a>, <acronym>, <address>, <area>, <b>, <bdo>, <big>, <blockquote>, <body>, <button>,
<caption>, <cite>, <code>, <dd>, <del>, <dfn>, <div>, <dt>, <em>, <fieldset>, <form>,
<h1> to <h6>, <hr>, <i>, <input>, <kbd>, <label>, <legend>, <li>, <map>, <object>, <ol>,
<p>, <pre>, <q>, <samp>, <select>, <small>, <span>, <strong>, <sub>, <sup>, <table>,
<tbody>, <td>, <textarea>, <tfoot>, <th>, <thead>, <tr>, <tt>, <ul>, <var>

您试图将事件处理程序附加到的元素类型是什么?onkeypress事件仅由以下标记支持:

<a>, <acronym>, <address>, <area>, <b>, <bdo>, <big>, <blockquote>, <body>, <button>,
<caption>, <cite>, <code>, <dd>, <del>, <dfn>, <div>, <dt>, <em>, <fieldset>, <form>,
<h1> to <h6>, <hr>, <i>, <input>, <kbd>, <label>, <legend>, <li>, <map>, <object>, <ol>,
<p>, <pre>, <q>, <samp>, <select>, <small>, <span>, <strong>, <sub>, <sup>, <table>,
<tbody>, <td>, <textarea>, <tfoot>, <th>, <thead>, <tr>, <tt>, <ul>, <var>

您考虑过使用吗

target.addEventListener(“单击”,函数(){alert(“Hi”);})

您考虑过使用吗

target.addEventListener(“单击”,function(){alert(“Hi”);})
试试这个(它的跨浏览器):

演示(请注意,JSFIDLE在IE 7中表现不佳):

在Chrome、FF5、IE7(重试几次后)和IE9中进行测试。

试试这个(它的跨浏览器):

演示(请注意,JSFIDLE在IE 7中表现不佳):



在Chrome、FF5、IE7(重试几次后)和IE9中进行了测试。

EventListener不是选项吗?看起来这正是您需要的…您需要设置DOM属性,而不是属性。属性是通过HTML设置的(作为默认状态)。@Matt-如何设置DOM属性?是否有理由坚持使用
setAttribute
?如果没有,请参阅下面我的答案,它允许您为所有主要浏览器正确附加
按键
事件。@Mrcheif-我正在寻找使用代码的方法。我想我的应用程序可能有问题,我只需要找到在哪里应用代码。谢谢你和大家的努力。EventListener不是一个选项吗?看起来这正是您需要的…您需要设置DOM属性,而不是属性。属性是通过HTML设置的(作为默认状态)。@Matt-如何设置DOM属性?是否有理由坚持使用
setAttribute
?如果没有,请参阅下面我的答案,它允许您为所有主要浏览器正确附加
按键
事件。@Mrcheif-我正在寻找使用代码的方法。我想我的应用程序可能有问题,我只需要找到在哪里应用代码。感谢您和大家的努力。@Griffin-虽然列表看起来几乎像我使用过的每个HTML标记…@Griffin-虽然列表看起来像我使用过的每个HTML标记…但这不适用于版本9之前的Internet Explorer版本。@Griffin,为了社区的利益,我认为最好提供几行代码来填补这一空白,而不是让您的评论保持原样。事实上,dom0做事情的方式似乎更好(因为所有这些答案都被投票通过了,而这一个似乎留下了一个bug),但事实并非如此。这个答案为Dom 2提供了更灵活的解决方案。@davin,填补这一空白的几行代码在海报给出的链接中。不过,我不确定在接下来的评论中你在说什么。@griffin,如果你阅读了我链接到的页面,它会告诉你,如果你想增加与旧版本浏览器的兼容性,你必须添加哪些代码。下面是直接链接:这不适用于9版之前的Internet Explorer版本。@griffin,为了社区的利益,我认为最好提供几行代码来填补这一空白,而不是让您的评论保持原样。事实上,dom0做事情的方式似乎更好(因为所有这些答案都被投票通过了,而这一个似乎留下了一个bug),但事实并非如此。这个答案为Dom 2提供了更灵活的解决方案。@davin,填补这一空白的几行代码在海报给出的链接中。不过,我不确定在接下来的评论中你在说什么。@griffin,如果你阅读了我链接到的页面,它会告诉你,如果你想增加与旧版本浏览器的兼容性,你必须添加哪些代码。以下是直接链接: