2016-03-13 75 views
0

我有一個表單,我希望ENTER的動作移動到下一個輸入字段而不是提交表單。我已經嘗試了下面的代碼和一百個變體,但我明顯做錯了什麼。 enter image description here將ENTER函數更改爲TAB

24行總是計算0的長度,所以27從不執行。 這是因爲文字而不是圖像:

$('form input').keydown(function(e) { 
    // The this keyword is <div id="input_form"> 
    if(e.keyCode == 13){ 

     e.preventDefault(); // cancel default 13 key behaviour (submitting form) 
     var n = $(this).next('input').length; 
     console.log("nexts=" + n); 
     if($(this).next('input').length) { // if there's another field 
      $(this).next('input').focus(); // move focus to next field in form 
     } 
     else { 
      $(this).blur(); 
     } 

    } 
}); 

形式是

<form action="" class="my_input_form" enctype="multipart/form-data" id="my_input_form_5" method="post" name=""> 

    <!--   First Name   --> 
    <div id="first_name_wrap" class="field_wrap" > 
     <label for="first_name" id="first_name_label" class="form_label">First Name</label> 
     <br /> 
     <input id="first_name" class="field_input" name="first_name" placeholder="" type="text" value="<?php echo $first_name?>"> 

     <div class="form_field_error" id="first_name_error" style="display:none;"></div> 
    </div> 

    <!--   Last Name   --> 
    <div id="last_name_wrap" class="field_wrap"> 
     <label for="last_name" id="last_name_label" class="form_label">Last Name</label> 
     <br /> 
     <input id="last_name" class="field_input" name="last_name" placeholder="" type="text" value="<?php echo $last_name?>"> 
     <div class="form_field_error" id="last_name_error" style="display:none;"></div> 
    </div> 

有誰看到這個問題?

+0

爲什麼第一個代碼是圖像?你能把它作爲文本提供嗎? –

+1

是的,請參閱上文。 – Steve

回答

1

.next()

獲取的每個元件的緊接兄弟在該組的 匹配的元素。如果提供了選擇器,則只有與選擇器匹配時纔會檢索下一個 兄弟

您有第一個父div,這意味着.next("input")是空的,因爲沒有兄弟元素。你需要做的是這樣的:

$(this).parent().next(".field_wrap").find("input").length 

這將:

  1. 進入的$(this)
  2. 轉到下一個元素的父元素(即與class="field_wrap"下一個元素)
  3. 查找第一個輸入元素
  4. 抓取長度
+0

謝謝。我知道了!如果在$(this).parent()。next(「。field_wrap」)。find(「input」)中的值爲1,那麼我將焦點移動到$(this).parent()。next(「 。.field_wrap 「)發現(」 輸入「)聚焦();並將焦點轉移到下一個輸入。我有一種感覺,有一種更優雅的方式來做到這一點,但它確實做到了我想要的。 – Steve