我想了解以下为什么不起作用:
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/
答案 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,我知道我们不需要获得新值:)。