javascript:如何区分所选元素列表和表单
以下是脚本: 您好,我有以下功能:javascript:如何区分所选元素列表和表单,javascript,Javascript,以下是脚本: 您好,我有以下功能: function on(t, e, f) { if ( e.length ) { var l = e.length, n = 0; for ( ; n < l; n++ ) { e[n].addEventListener(t, f, false) } } else { e.addEventListener(t, f, false);
function on(t, e, f) {
if ( e.length ) {
var l = e.length,
n = 0;
for ( ; n < l; n++ ) {
e[n].addEventListener(t, f, false)
}
} else {
e.addEventListener(t, f, false);
}
}
功能开启(t、e、f){
如果(如长度){
var l=e.长度,
n=0;
对于(;n
如果我们执行var handle=document.getElementsByClassName('some-class')代码>然后句柄
是一个节点列表
如果我们执行var handle=document.getElementById('an-id')代码>然后句柄
是单个节点
问题是,当我选择
时,它返回数组而不是单个元素
因此,我的on
函数失败。函数使用elm.length
filter。除了
,一切正常。如何解决这个问题?我知道elm.length在单个节点
元素上无法正常工作
你能帮忙吗?非常感谢表单元素有一个length属性(告诉表单中字段的数量)。您使用的代码无法准确检测元素是否为DOM节点,因此它假定表单是DOM节点的集合
如果需要绑定元素,最好始终传入数组或类似数组的对象,以便函数始终在集合上迭代
这可以简单到将参数包装在数组中:
on('click', [formElement], callback);
仅支持列表的
上的更新版本:
函数(类型、元素、回调){
变量长度,
我
长度=0;
if(elements&&elements.length){
长度=元素长度;
}
对于(i=0;i
我应该写什么来代替e.length
:(感谢您的回答您不需要这样做。只需要求调用方始终以数组或节点列表的形式传递即可。@zzbov:是的,我认为最好是以数组/类似数组的对象的形式传递它们。我会尝试此始终用于()
而不是if else
@zzzzBov:太好了……我尝试了你更新的脚本。但它仍然取决于元素。长度
,这意味着,在单个选定的
element@SlametBedjo,我明确表示“仅支持列表”,这意味着您应该在数组中封装单个元素。您可以添加标记名检查,但@zzzzBov的答案似乎更合适。如果(e.length&&!e.nodeName){
@crazy train:e.nodeName是正确答案,为什么不回答呢?
function on(type, elements, callback) {
var length,
i;
length = 0;
if (elements && elements.length) {
length = elements.length;
}
for (i = 0; i < length; i += 1) {
elements[i].addEventListener(type, callback, false);
}
}