JQuery .each功能不起作用

时间:2016-05-01 16:41:29

标签: javascript jquery

我想了解以下为什么不起作用:

function SetMaxLength() {
    var form = $("body").find("form");
    form.each(function () {
        var elements = $(this).find("input");
        elements.each(function() {
            var attr = $(this).attr('data-val-maxlength-max');
            if (typeof attr !== typeof undefined && attr !== false) {
                $(this).attr('maxlength', attr.value);
            }
        });
    });
}


<form action="/go/somewhere" autocomplete="off" class="form-one" method="post" role="form" novalidate="novalidate"> 
  <input data-val-maxlength="Invalid Email" data-val-maxlength-max="254" type="text" value="">
</form>

当我单步执行它时,它会找到1个表单但是然后在每个部分上它只是跳过它,然后跨过它。

基本上只要它看到data-val-maxlength-max属性时就这样做,假设它取值并在元素中注入maxlength属性。

JsFiddle:https://jsfiddle.net/j04vue8r/3/

5 个答案:

答案 0 :(得分:3)

由于您的页面中已包含jQuery,因此最好重写代码并使其更“ jQuery style ”。

我们走了:

$('[data-val-maxlength-max]').each(function(){
  $(this).attr('maxlength', $(this).data('val-maxlength-max'));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="/go/somewhere" autocomplete="off" class="form-one" method="post" role="form" novalidate="novalidate"> 
  <input data-val-maxlength="Invalid Email" data-val-maxlength-max="254" type="text" value="">
</form>

答案 1 :(得分:0)

我已经尝试过你的代码而不是跨过每个函数。问题是attr()函数没有设置maxlenght属性,因为你在代码中有错误:attr只是data-val-maxlength-max的值,所以你必须写这样的东西:

$(this).attr('maxlength', attr);

答案 2 :(得分:0)

这可以满足您的需求:

$(function() {
  $("form input").each(function() {
    var attr = $(this).attr('data-val-maxlength-max');
    if (typeof attr !== undefined && attr !== false) {
        $(this).attr('maxlength', attr);
    }
  });
});

答案 3 :(得分:0)

上述代码存在两个问题。 1.函数SetMaxLength未被调用 2.变量attr已包含值。所以你不需要做attr.value

代码下方

function SetMaxLength() {
var form = $("body").find("form");
form.each(function () {
    var elements = $(this).find("input");
    elements.each(function() {
        var attr = $(this).attr('data-val-maxlength-max');
        if (typeof attr !== typeof undefined && attr !== false) {
            $(this).attr('maxlength', attr);
        }
    });
});

} SetMaxLength()

    

答案 4 :(得分:0)

试试这个

   window.onload = function () {
    SetMaxLength(); 
}

function SetMaxLength() {

    var form = $("body").find("form");

    form.each(function () {

        var elements = $(this).find("input");

        elements.each(function() {
            var attr = $(this).attr('data-val-maxlength-max');
            console.log(attr);
            if (typeof attr !== typeof undefined && attr !== false) {
                $(this).attr('maxlength', attr);
            }
        });

    });

}

我所做的就是删除if语句中的attr.value。对我来说很好。你不需要这个值,因为你已经在变量中抓住了它:)。我鼓励你不要使用通用术语,比如&#34; form&#34;和&#34;元素&#34;和&#34; attr&#34;。它们可能会引发问题。

顺便说一下,将来你可能希望使用console.log。它帮我解决了这个问题。我在console.log(attr)行之后立即var attr看看我们得到了什么。在Chrome中,您可以通过按ctrl + shift + J来查看控制台。因为我看到它是254,我知道我们不需要获得新值:)。