2012-05-02 15 views
6

eklemek benim şimdiki HTML ve CSS kodu:, İşte yeni giriş alanını

<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; 
}​ 

You http://jsfiddle.net/mzNtj/2/ de eylem görebilirsiniz. Diğerleri doldurulduğunda yeni bir giriş alanını otomatik olarak nasıl ekleyebileceğimi bilmek isterim. Her alanın değerini okumak ve bir if bildirimi ile kontrol etmek için temel bir fikrim var. Ardından, hiç boşsa, yenisini ekleyin.

Bu, uygun bir yöntem olup olmadığını kontrol etmek için uygun bir yöntem midir?

+0

Sorunuz için Stack Overflow, Pienskabe, +1'e hoş geldiniz. Soru ve cevapların, insanların kendilerini ilgilendirmek için site dışı bağlantıları takip etmelerini gerektirmeden kendi başlarına durmasını tercih ediyoruz. jsFiddle harika bir sitedir ve sorunuzdaki örneklerle bağlantı kurmak için mükemmel bir fikirdir, ancak istikrarı ve çalışma süresiyle tam olarak bilinmemektedir. –

cevap

6

anahtar dinleyici ve bu işlevinde kullanarak tek işlevi çağırttırma geçerli:

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

İlk sizdiniz, teşekkürler;)! – Pienskabe

0

tüm alanları doldurulur zaman eklemek istediğiniz her ne ilk gizlemek ... sonra zaman son alan aşağıdaki kodu deneyin görünür bu alanı

+0

Merhaba, temelde, çirkin hale getirirdi ve yapmak istediğim şey tam olarak değil, ama teşekkürler, başka bir şey bulamazsam, aklımda tutulur. – Pienskabe

0

bu bir deneyin:

http://jsfiddle.net/F8qR2/

kod şudur: ne anlama dikkatle yorumlar http://jsfiddle.net/Ralt/mzNtj/4/

Oku:

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

Tamam, bu jsfiddle bakmak Bu kod şunları yapar:

// 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' ]); 
     } 
    } 
} 

Biliyorum, kodlarım, olayları işlemek için çapraz tarayıcıya önem verdiğimden, ancak every eski tarayıcılar tarafından desteklenmediğinden dolayı tuhaf. Oh iyi ...