html在不知道id的情况下动态添加事件监听器

发布于 2024-11-29 10:49:50 字数 363 浏览 0 评论 0 原文

当我构建页面时,我正在创建大量选择列表(下拉列表)。下拉列表基于外部数据文件,因此我在运行时设置 ID。由于

<% name="TypeA" + specialIDString %>
<select  id="<%= name %>" >
blah
blah 
</select>

我事先不知道 ID,因此如何添加事件侦听器?我可以在 DOM 中搜索 id 中包含“TypeA”的所有 id,然后为每个 id 添加一个侦听器吗?

我知道如何在 javascript 中触发 onLoad() 方法,在页面加载后,我只想知道如何搜索 DOM 以查找其中包含特定字符串的 ID。谢谢。

I am creating lots of select lists ( drop downs) when I build the page. The drop downs are based on external data files, so I set the id's at runtime. Something like

<% name="TypeA" + specialIDString %>
<select  id="<%= name %>" >
blah
blah 
</select>

How do I then add an event listener, since I don't know the ID ahead of time? Can I search the DOM for all id's with "TypeA" in the id, and just add a listener to each one of them?

I know how to trigger an onLoad() method in javascript, after the page is loaded, I just want to know how to search the DOM to find ID's with a particular string in them. Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

绮烟 2024-12-06 10:49:50

仅供记录,普通 JavaScript 答案:

function getElementsByIdStartsWith( type, idStartsWith ) {
    var arr = [],
        all = document.getElementsByTagName( type );

    for ( var i = 0; i < all.length; i++ ) {
        if ( all[i].id.indexOf( idStartsWith ) === 0 ) {
            arr.push( all[i] );
        }
    }

    return arr;
}

然后:

var selects = getElementsByIdStartsWith('select', 'TypeA');

现在您可以使用 for 循环将处理程序绑定到数组中的每个元素。

Just for the record, the vanilla JavaScript answer:

function getElementsByIdStartsWith( type, idStartsWith ) {
    var arr = [],
        all = document.getElementsByTagName( type );

    for ( var i = 0; i < all.length; i++ ) {
        if ( all[i].id.indexOf( idStartsWith ) === 0 ) {
            arr.push( all[i] );
        }
    }

    return arr;
}

and then:

var selects = getElementsByIdStartsWith('select', 'TypeA');

Now you can use for loop to bind handlers to each element from the array.

美煞众生 2024-12-06 10:49:50

如果你使用 jQuery,你可以简单地这样做:

$('select[id^=TypeA]').bind('yourevent', function() {});

If you use jQuery you can do this simply like:

$('select[id^=TypeA]').bind('yourevent', function() {});
第七度阳光i 2024-12-06 10:49:50

您可以内联添加事件侦听器并直接传递元素。

<select onclick="myfunction(this)" id="<%= name %>" >
blah
blah 
</select>

您可以做的另一件事是像这样传递事件属性:

<select onclick="myfunction(event)" id="<%= name %>" >
blah
blah 
</select>

然后在 myfunction 中, event.target 将是触发调用的元素。您可以通过 event.target.id 获取 id。

You can add the event listener inline and directly pass the element.

<select onclick="myfunction(this)" id="<%= name %>" >
blah
blah 
</select>

Another thing you can do is pass the event attribute like this:

<select onclick="myfunction(event)" id="<%= name %>" >
blah
blah 
</select>

Then in myfunction, event.target will be the element that triggered the call. You could get the id with event.target.id.

江南月 2024-12-06 10:49:50

如果您无法具体知道 ID,您还可以采取其他措施。

一种选择是使用类名;另一种选择是在 ID 前面添加一些静态内容(用 jquery 的说法),您可以使用开头选择器。

<select id="generated<%=name%>">

var mySelect = $('select[id^=generated]');

它会起作用,但它不是最好的做事方式,特别是如果您有多个生成的元素。它也相对较慢。

按 CSS 类名称选择可能是最好的方法。

If you can't know the ID specifically there are other things you can do.

One choice is to use a class name; another option is to prepend the ID with something static and (in jquery parlance) your can use a starts-with selector.

<select id="generated<%=name%>">

var mySelect = $('select[id^=generated]');

It will work but its not the best way of doing things, especially if you'll have more than one generated element. It's also relatively slow.

Selecting by CSS Class name would probably be the best way.

雪落纷纷 2024-12-06 10:49:50

如果你有 jQuery,那么使用 jQuery 查询选择器就很容易了。但如果没有:

  1. 向您的元素添加一个类:

    <% class="myClass" name="TypeA" +specialIDString %>
    <选择 id="<%= 姓名 %>" >
        废话
        废话 
    
    
  2. 使用 getElementsByClassName 访问您的元素

    var myElems = document.getElementsByClassName('myClass');
    
  3. 循环元素并添加事件侦听器

    for(var i=0; i

我知道 getElementsByClass 名称在 IE6(或 7 中也不起作用?)。但这是我的解决方案。也许我可以用 x-browser 解决方案更新它

if you have jQuery its easy with jQuery query selector. but if not:

  1. Add a class to your element:

    <% class="myClass" name="TypeA" + specialIDString %>
    <select  id="<%= name %>" >
        blah
        blah 
    </select>
    
  2. Use getElementsByClassName to reach your elements

    var myElems = document.getElementsByClassName('myClass');
    
  3. Loop around elements and add event listener

    for(var i=0; i<myElems.length;  i++){
        myElems[i].addEventListener('click', function(){}, false);
    }
    

I know getElementsByClass name don't work in IE6 (or 7 also?). But this is my solution. Maybe I can update it with x-browser solution

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文