Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从元素数组中按DOM位置聚焦无效元素?_Javascript_Jquery - Fatal编程技术网

Javascript 如何从元素数组中按DOM位置聚焦无效元素?

Javascript 如何从元素数组中按DOM位置聚焦无效元素?,javascript,jquery,Javascript,Jquery,我正在做验证。在验证中,只要from元素无效,我就将其推送到一个数组 当用户单击submit按钮时,我想关注元素,而不是它的数组位置。而是通过DOMposition 问题在于,发送id的服务器是到前端的。当他们发送id时,这与表单元素顺序不同 有什么想法吗?简单地说,我想按照它的DOM焦点位置对推送的元素进行排序 以下是我的重点方法: this.validate = function () { $.each(this.elements, function (i,elem) {

我正在做验证。在验证中,只要from元素无效,我就将其推送到一个数组

当用户单击submit按钮时,我想关注元素,而不是它的数组位置。而是通过
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