Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.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动态事件处理,而不是Jquery_Javascript_Jquery_Dynamic_Event Handling - Fatal编程技术网

Javascript动态事件处理,而不是Jquery

Javascript动态事件处理,而不是Jquery,javascript,jquery,dynamic,event-handling,Javascript,Jquery,Dynamic,Event Handling,这是我的密码 <html> <head> <script type="text/javascript"> window.onload = function(){ sel = document.getElementsByTagName('select'); for(i=0;i<sel.length;i++)sel[i].onclick = function(){alert('');} }

这是我的密码

<html>
    <head>
    <script type="text/javascript">
    window.onload = function(){
        sel = document.getElementsByTagName('select');
        for(i=0;i<sel.length;i++)sel[i].onclick = function(){alert('');}
    }
    </script>
    </head>
    <body>
    <div id="ss"></div>
    <select></select>
    <input type="button" onclick="document.getElementById('ss').appendChild(document.createElement('select'))"/>

    </body>
</html>

window.onload=函数(){
sel=document.getElementsByTagName('select');

对于(i=0;i将事件绑定到DOM中已存在的父元素:

document.body.addEventListener('click', function (e) {
  if (e.target.tagName.toLowerCase() == 'select') {
    alert('You clicked a select!');
  }
});


如果使用
getElementById()
而不是
getElementByTagName(),则将单击绑定到
表单
附近的元素“closer”会稍微明智一些
它更简单,因为您不必担心绑定到的号码的索引。

您只需在加载窗口时设置onclick。您只需将当前在window.onload中的代码放入一个命名函数,然后在每次添加新的select时调用它

下面是一个愚蠢的方法:

<html>
    <head>
    <script type="text/javascript">

    function update () {
        sel = document.getElementsByTagName('select');
        for(i=0;i<sel.length;i++)sel[i].onclick = function(){alert('');}
    }
    window.onload = update;

    </script>
    </head>
    <body>
    <div id="ss"></div>
    <select></select>
    <input type="button" onclick="document.getElementById('ss').appendChild(document.createElement('select'));update();"/>

    </body>
</html>

函数更新(){
sel=document.getElementsByTagName('select');

对于(i=0;i,无需在每次添加一个select时将onclick处理程序绑定到每个select

我不打算重新键入您的整个页面,但您可以通过阅读以下片段了解情况:

function handler() {
    alert('You clicked a select!');
}

window.onload = function(){
    sel = document.getElementsByTagName('select');
    for(int i= 0; i < sel.length; i++) {
        sel[i].onclick = handler;
    }
}

function addSelect() {
    var slt = document.createElement("select");
    document.getElementById('ss').appendChild(slt);
    slt.onclick = handler;
}

<input type="button" onclick="addSelect();"/>
函数处理程序(){
警报('您单击了选择!');
}
window.onload=函数(){
sel=document.getElementsByTagName('select');
对于(int i=0;i
您可以使用如下所示的跨浏览器解决方案动态添加事件处理程序

sel = document.getElementsByTagName('select');
for( i=0; i<sel.length; i++){
    if (sel[i].addEventListener){
        sel[i].addEventListener("click", clickHandler, false);
    } else if (sel[i].attachEvent){
        sel[i].attachEvent("onclick", clickHandler);
    }else{
        sel[i].onclick = clickHandler;
    }
}

function clickHandler(event){

}
sel=document.getElementsByTagName('select');

对于(i=0;ijQuery的live函数通过使用“”工作。基本思想是将侦听器绑定到父元素上,该父元素在页面加载时保证存在。低于该()将触发一个可以被父侦听器捕获的事件。从那里,您需要检索事件的目标/源元素,并确定它是否是您关心的事件

类似的内容可以用来监听点击。只需确保您添加的任何新元素都位于适当的父容器中,并且具有一个属性,使它们与其他可点击元素区分开来

<html>
<head>
    <script type="text/javascript">
        window.onload = function(){
            // get the relevant container
            var eventContainer = document.getElementById("EventContainer");

            // bind a click listener to that container
            eventContainer.onclick = function(e){

                // get the event
                e = e || window.event;

                // get the target
                var target = e.target || e.srcElement;

                // should we listen to the click on this element?
                if(target.getAttribute("rel") == 'click-listen')
                {
                    alert("You clicked something you are listening to!");
                }// if
            };
        };
    </script>
</head>
<body>
<div id="EventContainer">
    <input type="button" rel="click-listen" name="myButton" value="Listening to this button." />
    <input type="button" name="anotherButton" value="Not listening." />
    <p>I'm also listening to this a element: <a href="#" rel="click-listen">listening to this</a></p>
</div>
</body>
</html>

window.onload=函数(){
//获取相关容器
var eventContainer=document.getElementById(“eventContainer”);
//将单击侦听器绑定到该容器
eventContainer.onclick=函数(e){
//获取事件
e=e | | window.event;
//击中目标
var target=e.target | | e.src元素;
//我们应该听听点击这个元素的声音吗?
如果(target.getAttribute(“rel”)=“单击侦听”)
{
警报(“您单击了您正在收听的内容!”);
}//如果
};
};
我也在听这个元素:


用sel[i]替换sel,即使在这之后,它也不适用于动态创建的元素,但可以帮助我了解有关跨浏览器脚本的新信息:-)谢谢,请解释这行代码e=e | | | window.event这里的| |意思是什么?这称为短路评估。
|
是“逻辑OR”。它返回第一个真值或最后一个值。