未捕获的TypeError:尝试使用jQuery

时间:2018-07-23 15:58:25

标签: jquery html dom input attributes

可能是关于我使用jQuery方法的错误。我不确定该如何解决。因此,考虑将其组合起来以获得一些帮助。这是我要实现的目标:

我有一些基于某些后端逻辑的输入元素呈现到我的网页上,因此问题的外观趋于改变。对于那些将其类别定义为“ GTnumeric”且“ type”的值未“隐藏”的元素,我试图将“ type”的值设置为“ tel”(我无法更改任何逻辑在后端,因此尝试在前端实现这一目标)。

以下使用html dom元素的代码工作正常,但我试图找出一种使用jQuery实现相同功能的方法:

<input class="validated GTnumeric" size="3" type="hidden" value="">
<input class="validated GTnumeric" size="2" type="text" value="">

工作代码:

 var r = $('[class="validated GTnumeric"]');
 for(var ec in eClass){
    if(eClass[ec].getAttribute("type") != 'hidden'){
       eClass[ec].setAttribute("type","tel");
    }
 }

没有工作代码:

 $(document).ready(function() {                        
        var inputEls = $(".GTnumeric");
        for(var ec in inputEls){
            if($(inputEls[ec]).attr("type") != 'hidden'){
                $(ec).attr("type","tel");
            }
        }
     });

请您指导我。这将有很大的帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

您将获得jQuery对象的集合,而不是DOM元素(它们包含在jQuery对象中),因此您可以使用.each()来解析它们,其中$(this)是功能。

这是您要使用正确的jQuery执行的操作...

$(document).ready(function() {                        
    var inputEls = $(".GTnumeric");
    inputEls.each(function() {
        if ($(this).attr("type") != "hidden"){
            $(this).attr("type", "tel");
        }
    });
});

但是,您可以使用选择器来定位有问题的元素,并以此方式进行操作...

$(document).ready(function() {                        
    $(".GTnumeric").not("[type=hidden]").attr("type", "tel");
});

这是一个例子...

$(".GTnumeric").not("[type=hidden]").attr("type", "tel");

$(".GTnumeric").each(function() { console.log(this.getAttribute("type")); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="GTnumeric" type="hidden"></div>
<div class="GTnumeric" type="hidden"></div>
<div class="GTnumeric" type="something"></div>
<div class="GTnumeric" type="else"></div>
<div class="GTnumeric" type="here"></div>