2012-05-02 19 views
6

Tu jest mój bieżący kod HTML i CSS:Kiedy wszystkie poprzednie pola są wypełnione, dodać nowe pole wejściowe

<form method="post" id="achievementf1" action=""> 
    <span>1.</span> 
    <input type="text" name="achievement1" id="achievement1" /> 
    <br /> 
    <span>2.</span> 
    <input type="text" name="achievement2" id="achievement2" /> 
    <br /> 
    <span>3.</span> 
    <input type="text" name="achievement3" id="achievement3" /> 
    <br />      
    <input type="submit" name="submit1" value="Registrate" /> 
    </form> ​ 
#border #info-box #info #box input[type="text"] { 
    float: left; 
    margin-top: 10px; 
    margin-bottom: 10px; 
    height: 25px; 
    width: 650px; 
    outline: none; 
} 
#border #info-box #info #box input[type="submit"] { 
    margin-left: 500px; 
    margin-top: 10px; 
    margin-bottom: 10px; 
    height: 35px; 
    color: #fff; 
    font-size: 20px; 
    border: 2px solid #fff; 
    border-radius: 8px 8px 8px 8px; 
    padding-left: 15px; 
    padding-right: 15px; 
    padding-top: 3px; 
    cursor: pointer; 
}​ 

Można zobaczyć go w akcji na http://jsfiddle.net/mzNtj/2/. Chciałbym wiedzieć, w jaki sposób mogę automatycznie dołączyć nowe pole wejściowe, gdy wszystkie pozostałe zostaną wypełnione. Mam podstawowy pomysł, aby przeczytać wartość każdego pola i sprawdzić go za pomocą instrukcji if. Następnie, jeśli żadna nie jest pusta, dodaj nową.

Czy jest to właściwy sposób sprawdzenia, czy ktoś ma lepsze pomysły?

+0

Witamy w Stack Overflow, Pienskabe, +1 na twoje pytanie. Wolimy, aby pytania i odpowiedzi stały na własną rękę, nie wymagając od ludzi, aby śledzili linki poza miejscem, aby je zrozumieć. jsFiddle jest świetną witryną i świetnym pomysłem jest link do twoich przykładów w twoim pytaniu, ale nie jest to dokładnie znane ze stabilności i czasu pracy. –

Odpowiedz

6

Wypróbuj poniższy kod:

$(function(){ 
    $(document).on("change","input", function(){ 
     var allGood=true; 
     var lastInputField=0; 
     $("input").each(function() { 
      if ($(this).val() =="") { 
       allGood=false; 
       return false; 
      } 
      lastInputField++; 
     }); 

     if (allGood) { 
      $("<span>" + lastInputField + "<input type='text' id='lastinputfieldId" + lastInputField +"'" + 
       "name='lastinputfieldName" + lastInputField + "'></span>").appendTo("form"); 
     } 
    }); 
}); 
​ 

Demo: http://jsfiddle.net/mzNtj/3/.

+0

Byłeś pierwszy, dzięki;)! – Pienskabe

0

pierwszy ukryj co kiedykolwiek chcesz dodać gdy wszystkie pola są wypełnione ... wtedy kiedy ostatnie pole jest zadzwonić jedną funkcję za pomocą klucza słuchacza iw tej funkcji sprawiają, że pole widoczny

+0

Cześć, dobrze, że w zasadzie, sprawiłoby, że byłoby brzydkie i nie jest to dokładnie to, co chciałem zrobić, ale dzięki, będę pamiętać, jeśli nie dowiem się niczego innego. – Pienskabe

0

spróbować tego:

http://jsfiddle.net/F8qR2/

kod jest:

function AllInputsFilled() { 
    return $("input[type='text']", $("#achievementf1")).filter(function() { 
     return $(this).val().trim() === ""; 
    }).size() === 0; 
} 

function AdditionEvent() { 
    if (AllInputsFilled()) { 
     AddInput();  
    } 
} 

function AddInput() { 
    var cnt = $("input[type='text']", $("#achievementf1")).size() + 1; 
    $("<br><span>" + cnt + "</span><input type='text' name='achievement" + cnt+ "' id='achievement" + cnt+ "' />").insertAfter("#achievementf1 input[type='text']:last"); 
    $("input", $("#achievementf1")).unbind("keyup").bind("keyup", function(){ AdditionEvent() }); 

} 

$("input", $("#achievementf1")).bind("keyup", function(){ AdditionEvent() });​ 
0

porządku, przyjrzeć się tej jsfiddle: http://jsfiddle.net/Ralt/mzNtj/4/

Czytaj uważnie komentarze, aby zrozumieć, co ten kod:

// First, listen for the "onkeypress" event instead of the "blur" or "change". 
// Why? For the UX, since the user will think he can click the submit 
// button as soon as the third field is filled in if you use the "blur" or 
// "change" event. 
document.forms[ 'achievementf1' ].onkeypress = function(e) { 
    // Some cross-browser handling 
    var e = e || window.event, 
     target = e.target || e.srcElement; 

    // If the target is an INPUT 
    if (target.nodeName === 'INPUT') { 

     // Now here is the tricky part: 
     // The "every" method returns false if *one* callback returns false, 
     // otherwise it returns true. 
     // And we use !! to check if it's not empty. 
     var allNotEmpty = [].every.call(this.elements, function(el) { 
      return !!el.value; 
     }) 

     // If it's true, it means all the fields are not empty 
     if (allNotEmpty) { 

      // So let's create an input 
      var newInput = document.createElement('input') 
      // Set some properties 
      // And then... insert it before the submit button :-) 
      this.insertBefore(newInput, this.elements[ 'submit1' ]); 
     } 
    } 
} 

Wiem, że mój kod jest dziwny, ponieważ zależy mi na obsłudze różnych przeglądarek, ale every nie jest obsługiwany przez starsze przeglądarki. No cóż ...

Powiązane problemy