Javascript 如何从元素数组中按DOM位置聚焦无效元素?
我正在做验证。在验证中,只要from元素无效,我就将其推送到一个数组 当用户单击submit按钮时,我想关注元素,而不是它的数组位置。而是通过Javascript 如何从元素数组中按DOM位置聚焦无效元素?,javascript,jquery,Javascript,Jquery,我正在做验证。在验证中,只要from元素无效,我就将其推送到一个数组 当用户单击submit按钮时,我想关注元素,而不是它的数组位置。而是通过DOMposition 问题在于,发送id的服务器是到前端的。当他们发送id时,这与表单元素顺序不同 有什么想法吗?简单地说,我想按照它的DOM焦点位置对推送的元素进行排序 以下是我的重点方法: this.validate = function () { $.each(this.elements, function (i,elem) {
DOM
position
问题在于,发送id
的服务器是到前端的。当他们发送id
时,这与表单元素顺序不同
有什么想法吗?简单地说,我想按照它的DOM
焦点位置对推送的元素进行排序
以下是我的重点方法:
this.validate = function () {
$.each(this.elements, function (i,elem) {
var element = $(elem);
var prop = String(element.get(0).type).toUpperCase();
var result = that.validateOne({"prop":prop,"elem":element});
});
if(that.validateResut.length)
that.validateResut[0].focus(); //it is focusing last element or mid some time.. i would like to focus by DOM position
}
提前谢谢
您可以尝试使用此代码进行排序。稍后,您可以相应地附加它:
obj.sort(positionSort); //Call the function by passing the array of elements.
function positionSort(a, b) {
var A = $('#' + a).position().top;
var B = $('#' + b).position().top;
return ((A < B) ? -1 : ((A > B) ? 1 : 0));
}
obj.sort(位置排序)//通过传递元素数组来调用函数。
功能位置排序(a、b){
var A=$('#'+A).position().top;
var B=$('#'+B).position().top;
回报率((AB)?1:0);
}
演示:
查看控制台以了解结果。在您发布的代码中,您拥有该元素,并且您知道它是否有效。为什么不在需要的地方跟踪它:
var obj = ['country', 'username', 'email', 'password', 'zip'];
var f = $('form');
var elems = f.find('input');
elems.filter('[type="button"]').click(function() {
var invalid = [];
elems.each(function () {
var element = $(this);
if ($.inArray(element.attr('id'), obj) !== -1) {
var result = Math.random()<.5; // Random boolean just for test purposes
if (!result) {
invalid.push(element);
}
}
});
invalid.shift().focus(); // focus on first element in array
// invalid.pop().focus(); // focus on last element in array
});
var obj=['country','username','email','password','zip'];
变量f=$(‘形式’);
var elems=f.find(‘输入’);
元素过滤器('[type=“button”]')。单击(函数(){
var无效=[];
每个元素(函数(){
var元素=$(此);
if($.inArray(element.attr('id'),obj)!=-1){
var result=Math.random()您从服务器获得验证?不,我在前端进行验证。但他们从后端发送Id