2014-02-02 2 views
1

Я стараюсь с field.first().focus();, но я получаю это сообщение в консоли:фокуса на первое поле с функцией Foreach

Uncaught TypeError: Объект #HTMLInputElement не имеет какую-либо методы «первую»

Я думаю, Мне не хватает шаг, но я не сейчас.

<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> 

ОБЗОР КОД

добавить переменную и часть кода, как предложение. Он отлично работает, и теперь он меняет класс и значение только для первого поля.

<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> 
+0

Можете ли вы обеспечить [jsFiddle] (http://jsfiddle.net/) демонстрируя вашу проблему? – Xotic750

+1

@ Xotic750 Это ссылка для демонстрации [jsFiddle] (http://jsfiddle.net/geomo/464uT/2/) с некоторым переводом итальянский/английский для входного значения. – geomo

ответ

0

Добавить переменную так вы применяете только фокус в первой итерации, что соответствует условию еще в цикле

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 
     } 
    } 
}); 
Смежные вопросы