我有表格
<form action="test.php" id="loginform" name="loginform" method="post">
<input name="title[]" id="title1" type="text" value="" />
<input name="title[]" id="title2" type="text" value="" />
<input name="title[]" id="title3" type="text" value="" />
<input name="label" id="label" type="text" value="" />
<input type="submit" name="submit" value="Submit" id="submit"/>
</form>
我试图获得像这样的每个元素的id
$('#loginform').bind('submit', function () {
{
var value = {};
var x = 0;
var y = 0;
var temp = {};
var elements = $(this).serializeArray();
$.each(elements, function (i, element) {
var tempname = elements[i].name;
var tempvalue = elements[i].value;
if (tempname.indexOf("[]") === -1) {
var tempid = $("#" + tempname);
} else if ($.inArray(String(tempname.replace("[]", "")), temp) == -1) {
temp[y] = String(tempname.replace("[]", ""));
var tempid = $("#" + tempname.replace("[]", x));
y++;
} else if ($.inArray(String(tempname.replace("[]", "")), temp) == 0) {
x++;
var tempid = $("#" + tempname.replace("[]", x));
} else {
var tempid = $("#" + tempname.replace("[]", x));
}(tempvalue == "") ? tempid.addClass("hightlight").css({
'background': '#FFC4C4',
'border': '1px solid #F00'
}) : tempid.removeClass("hightlight");
});
return false;
});
无论数组中的字符串如何,此inArray始终返回-1。
任何人都可以看到这个。很多但都是徒劳的
答案 0 :(得分:1)
使用的代码:
var elements = $('#loginform').serializeArray();
for (var p = 0; p <= elements.length; p++){
if (elements[p]) {
var counter = 1;
counter += p;
var id = elements[p].name.replace(/\[\]/, '');
id = (id.indexOf('title') !== -1) ? id + counter : id;
alert(id);
}
}
您可以简单地获取表单中每个元素的id
,如下所示:
$('#loginform :input').each(function(){
var id = this.id;
// manipulate id variable
});
答案 1 :(得分:0)
首先,我建议您查看jquery.validator以进行表单验证:jQuery Validation。它使表单验证更容易。
从发布的代码中我认为您正在尝试验证表单元素值,并且您尝试根据非空值来验证字段。
为此您可以尝试这样的事情:
$('#loginform').bind('submit', function (){
var elements = $(this).serializeArray();
$(":input").each(function{
var $this = $(this);
($this.val()=="") ? $this.addClass("hightlight").css({
'background': '#FFC4C4',
'border': '1px solid #F00'
}) : $this.removeClass("hightlight");
});
});
既然您已将标题文本框命名为title [],我认为您要验证这些文本框至少具有一个值。如果是这种情况,请使用此(这可以在有多个元素组的情况下使用):
$('#loginform').bind('submit', function (){
var elements = $(this).serializeArray();
//Trim all Inputs
$(':input', this).each(function(){
$(this).val($.trim($(this).val()));
});
//Validated non Grouped Inputs
$(':input:not([name*="\[\]"])', this).each(function{ //Selects all input elements that don't end with []
var $this = $(this);
($this.val()=="") ? $this.addClass("hightlight").css({
'background': '#FFC4C4',
'border': '1px solid #F00'
}) : $this.removeClass("hightlight");
});
//Validated Grouped Inputs
$(':input[name$="\[\]"]', this).each(function(){
var $namedEls = $(':input[name="' + this.name + '"]', this);
//If no element in the name group is selected then mark as invalid.
if($namedEls.filter('[value!=""]').length == 0){
var $this = $namedEls.eq(0);
$this.addClass("hightlight").css({
'background': '#FFC4C4',
'border': '1px solid #F00'
}) : $this.removeClass("hightlight");
}
});
});
答案 2 :(得分:-1)
这是一篇很老的帖子,但我想我会添加自己的想法。从下面的链接复制源代码,您将能够向返回的数组添加任何您想要的元素属性。这样你的实现就是jQuery的实现。是的,如果更新了jQuery源代码,您将需要手动更新代码,但这与其他解决方案相同。
https://searchcode.com/codesearch/view/25323764/
var
rbracket = /\[\]$/,
rCRLF = /\r?\n/g,
rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
rsubmittable = /^(?:input|select|textarea|keygen)/i,
rcheckableType = /^(?:checkbox|radio)$/i;
$.fn.extend({
customSerializeArray: function() {
return this.map(function() {
// Can add propHook for 'elements' to filter or add form elements
var elements = $.prop(this, 'elements');
return elements ? $.makeArray(elements) : this;
})
.filter(function() {
var type = this.type;
// Use .is(':disabled') so that fieldset[disabled] works
return this.name && !$(this).is(':disabled') &&
rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&
(this.checked || !rcheckableType.test(type));
})
.map(function(i, elem) {
var val = $(this).val();
if (val == null) {
return null;
}
if ($.isArray(val)) {
return $.map(val, function(val) {
return { name: elem.name, value: val.replace(rCRLF, '\r\n') };
});
}
return { name: elem.name, value: val.replace(rCRLF, '\r\n') };
}).get();
}
});