HTML在不知道id的情况下动态添加事件侦听器
html dynamically add event listeners without knowing id
当我构建页面时,我正在创建许多选择列表(下拉列表)。下拉菜单是基于外部数据文件的,所以我在运行时设置id。比如
<% name="TypeA" + specialIDString %>
<select id="<%= name %>" >
blah
blah
</select>
我如何添加事件侦听器,因为我不知道ID提前?我是否可以在DOM中搜索id中包含"TypeA"的所有id,并为每个id添加一个侦听器?
我知道如何在javascript中触发onLoad()方法,页面加载后,我只是想知道如何搜索DOM以查找其中具有特定字符串的ID。谢谢。
只是为了记录,普通的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循环将处理程序绑定到数组中的每个元素。
如果你使用jQuery,你可以这样做:
$('select[id^=TypeA]').bind('yourevent', function() {});
您可以内联添加事件侦听器并直接传递元素。
<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。
如果你不能明确地知道ID,你还可以做其他事情。
一种选择是使用类名;另一种选择是在ID前加上一些静态的东西,(用jquery的说法)你可以使用一个start_with_selector。
<select id="generated<%=name%>">
var mySelect = $('select[id^=generated]');
它将工作,但它不是最好的方式做事情,特别是如果你有多个生成的元素。它也相对较慢。
按CSS类名选择可能是最好的方法
如果你有jQuery它很容易jQuery查询选择器。但如果没有:
-
为元素添加一个类:
<% class="myClass" name="TypeA" + specialIDString %> <select id="<%= name %>" > blah blah </select>
-
使用
getElementsByClassName
到达您的元素var myElems = document.getElementsByClassName('myClass');
-
循环元素并添加事件侦听器
for(var i=0; i<myElems.length; i++){ myElems[i].addEventListener('click', function(){}, false); }
我知道getElementsByClass的名字不工作在IE6(或7也?)。这就是我的解。也许我可以用x-browser解决方案来更新
相关文章:
- 如何在Google柱状图中动态添加行/列
- 使用jQuery动态添加表并在其中动态添加行
- 如何使用Angular动态添加iframe-src
- 如何向JSON数组动态添加属性
- 动态添加通过json创建的选择项
- 使用jQuery根据动态生成的html动态添加html
- 使用.on动态添加jquery/js不知道的html元素
- JS动态添加字段-删除按钮不起作用
- 动态添加AngularJS脚本
- 将表行动态添加到表或tbody元素中
- jQuery-通过AJAX调用动态添加具有值的表单元格
- 将特定属性动态添加到元素中
- 在highcharts.js中向点弹出窗口动态添加文本
- 如何在Angular.js中循环动态添加Fields并获取数据并将其发送到服务器
- 使用jQuery动态添加onClick事件
- 如何在Opencart中动态添加JavaScript
- 剑道UI下载列表:如何动态添加新元素
- 动态添加复选框和输入框 jQuery
- 动态添加哈希标记;t工作
- 将图表动态添加到组合高图表中