javascript - 使用 forEach 函数聚焦于第一个字段

标签 javascript

我尝试使用 field.first().focus(); 但我在控制台中收到此消息:

未捕获的类型错误:对象#HTMLInputElement没有方法“first”

我认为我错过了一步,但我现在不知道。

<script>
    function richiesti() { //open function richiesti

    var dati=0;
    var cognome=document.clienti.cognome;
    var nome=document.clienti.nome;
    var codfisc=document.clienti.codfisc;

    [cognome, nome, codfisc].forEach(function (field) { // open function field
       if (field.value){ // open if value
            dati++;
            } // close if value
       else { // open else value
            field.className = "bg_orange text-sx c_white b";
            field.value = "richiesto" ;
            field.focus(); // i need the focus at first field 
       } // close else value
    }); // close function field

    if ( dati == 3 ){  // open if dati

        var pattern = /^[a-zA-Z]{6}[0-9]{2}[a-zA-Z][0-9]{2}[a-zA-Z][0-9]{3}[a-zA-Z]$/;
        var codiceFiscale = document.getElementById("codfisc");

        if (codiceFiscale.value.search(pattern) == -1) { // open if codiceFiscale
            alert("Il valore inserito non è un codice fiscale!");
            codiceFiscale.value = "";
            codiceFiscale.focus();
        } // close if codiceFiscale
        else { // open else codiceFiscale 
            document.clienti.submit() ;
        } // close else codiceFiscale
    } // close if dati 

    else { // open else dati
        alert('Cognome, Nome e Codice fiscale sono campi obbligatori.');


    } // close else dati    
} // close function richiesti 
</script>

这是带有输入字段的表单:

<HTML>
<table class="half" >
   <tr>
   <td class="tdocra c_white  b">Cognome :</td>
   <td><input name="cognome" id="cognome" type="text" class="text-sx" value="" ></td>
   <td class="tdocra c_white  b">Nome :</td>
   <td><input name="nome" id="nome" type="text" class="text-sx" value=""></td>
   <td class="tdocra c_white  b">Codice Fiscale :</td>
   <td><input name="codfisc" id="codfisc" type="text" class="text-sx" value="" onChange="richiesti();"></td>
   </tr>
</table>
</HTML>

查看代码

我像建议一样添加了一个变量和部分代码。 它工作正常,现在它仅更改第一个字段 void 的类和值。

<script>
function richiesti() { //open function richiesti

    var dati=0;
    var cognome=document.clienti.cognome;
    var nome=document.clienti.nome;
    var codfisc=document.clienti.codfisc;

    var first = true; // add variable

    [cognome, nome, codfisc].forEach(function (field) { // open function field
       if (field.value){ // open if value
            dati++;
            } // close if value
       else { // open else value
             if (first) { // set focus to first only
               field.className = "bg_orange text-sx c_white b";
               field.value = "richiesto" ;
               field.focus();
               first = false; // after the first one has focus
             }
       } // close else value
    }); // close function field

    if ( dati == 3 ){  // open if dati

        var pattern = /^[a-zA-Z]{6}[0-9]{2}[a-zA-Z][0-9]{2}[a-zA-Z][0-9]{3}[a-zA-Z]$/;
        var codiceFiscale = document.getElementById("codfisc");

        if (codiceFiscale.value.search(pattern) == -1) { // open if codiceFiscale
            alert("Il valore inserito non è un codice fiscale!");
            codiceFiscale.value = "";
            codiceFiscale.focus();
        } // close if codiceFiscale
        else { // open else codiceFiscale 
            document.clienti.submit() ;
        } // close else codiceFiscale
    } // close if dati 

    else { // open else dati
        alert('Cognome, Nome e Codice fiscale sono campi obbligatori.');


    } // close else dati    
} // close function richiesti
</script> 

最佳答案

添加一个变量,以便您仅在与循环中的 else 条件匹配的第一次迭代中应用焦点

var dati=0;
var cognome=document.clienti.cognome;
var nome=document.clienti.nome;
var codfisc=document.clienti.codfisc;

var first = true; // add variable

[cognome, nome, codfisc].forEach(function (field) {
   if (field.value){ // open if value
        dati++;
   } else {
        field.className = "bg_orange text-sx c_white b";
        field.value = "richiesto" ;

        if (first) { // set focus to first only
            field.focus();
            first = false; // after the first one has focus
        }
   }
});

关于javascript - 使用 forEach 函数聚焦于第一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21513550/

相关文章:

javascript - React-Bootstrap 水平表单不起作用

javascript - 带毫秒的 jQuery 秒表

javascript - 无法检查第二个循环内的复选框

javascript - 从包含特定 aria 标签的表中查找 span

javascript - jquery.inArray() 与 Object.hasOwnProperty() 之间的性能差异?

javascript - 检测复选框是否被选中,然后获取 div id

javascript - 以编程方式显示 Firefox 扩展弹出窗口

javascript - 当光标在右列上方时如何滚动左列?

javascript - 我可以将 NPX 与 yarn 一起使用吗?

javascript - Mongoose 模型中的 model 和 model._doc 有什么区别?