2015-10-29 42 views
0

我試圖使光標跳到代碼欄或手動代碼輸入到下一個字段根據一些規則(下一個領域是不是必需的下一個按順序...)收到兩個輸入時處理輸入按鍵事件

該功能被觸發按下回車鍵(代碼欄的末尾也給我輸入我需要的)。

問題是提交只有一個輸入按鍵(一個手動或一個代碼欄)時,該功能就好像在執行過程中有第二個按鍵一樣... 它將重新評估哪個輸入處於活動狀態。 我甚至插入了一些警報消息,並注意到它確實運行了兩次!

無法弄清楚我使用不同的方法重寫了代碼,但結果是一樣的。同樣的錯誤。

我試過e.preventdefault()也是,但事實並非如此。

這裏是代碼的兩個版本:

$(document).keypress(function (e) { 
    if (e.which == 13) { 
     var focado = document.getElementById(document.activeElement.id); 
     var fim = focado.id.substring(1); 
     var inicio = focado.id.substring(0, 1); 

     var anterior = inicio + (fim - 1); 

     switch (fim) { 
      case "1": 
       fimseg = "2" 
      case "2": 
       fimseg = "3" 
      case "3": 
       fimseg = "4" 
      case "4": 
       fimseg = "5" 
     } 
        var seguinte = inicio + (fimseg); 

        if (seguinte == "p5") { 
          seguinte = "a1"; 
        } 

     if (focado.value.length == 0) { 

      if (fim != 1) { 

       document.getElementById(focado.id).focus() 
      } else { 

       if (anterior.value.length == 0) { 

        document.getElementById(anterior).focus() 
       } else { 

        if (seguinte == "a5") { 

         document.getElementById("btnSubmit").click(); 
        } else { 

         document.getElementById(seguinte).focus() 
        } 
       } 
      } 
     } else { 

      if (focado.value.length < 7 || (isNaN(focado.value))) { 

       document.getElementById(focado.id).innerHtml = ""; 
       if (anterior.value.length == 0) { 

        document.getElementById(anterior).focus() 
       } else { 

        document.getElementById(focado).focus() 
       } 
      } else { 

       if (fim != 1) { //não é p1 nem a1 


        if (anterior.value.length == 0) { 

         document.getElementById(anterior).focus() 
        } else { 

         if (seguinte == "a5") { 

          document.getElementById("btnSubmit").click(); 
         } else { 

          document.getElementById(seguinte).focus() 
         } 
        } 
       } else { 


        document.getElementById(seguinte).focus() 
       } 
      } 
     } 
    } //não é enter 
}); //fim função 

,並且具有相同的錯誤的另一個版本

$(document).keypress(function (e) { 
if (e.which == 13) { 

    var focado = document.getElementById(document.activeElement.id); 

    if (focado.value.length >= 7) { 

     switch (focado.id) { 

      case "p4": 

       document.getElementById("a1").focus(); 
       break; 

      case "p3": 
       document.getElementById("p4").focus(); 
       break; 

      case "p2": 
       document.getElementById("p3").focus(); 
       break; 

      case "p1": 

       document.getElementById("p2").focus(); 

     } 

    } else {//menos de 7 algarismos 

     var fim = focado.id.substring(1); 
     var inicio = focado.id.substring(0, 1); 
     var anterior = inicio + (fim - 1); 

     if (fim != 1) {//não é p1 nem a1 

      if (focado.value.length == 0) {//em branco 




       if (document.getElementById(anterior).value.length == 0) {//se anterior em branco 

        document.getElementById(anterior).focus();//então foca no anterior - devia haver um get focus sempre que fosse num vazio ia para o anterior 
       } else {//anterior com dados 
        if (document.getElementById(anterior).value.length >= 7) { 

         switch (inicio) { 
          case "p"://se anterior com dados é p1 
           document.getElementById("a1").focus(); 

           break; 

          case "a"://se anterior com dados é a1 
           document.getElementById("btnSubmit").click(); 
           break; 
         }//final switch 

        } else {//se anterior tem menos de 7 algarismos 
         document.getElementById(anterior).value = ""; 
         document.getElementById(anterior).focus(); 

        } 



       } 



      }//final se focado em branco 

     }//final não é p1 nem a1 

    }//final menos de 7 algarismos 

}//não é enter 

}); 

可能趕上用不同的鍵碼或不同的事件處理程序進入? 感謝

UPDATE: inputboxes是: 「P1」, 「P2」, 「P3」, 「P4」, 「A1」, 「A2」, 「A3」, 「A4」,有一個 「btnSubmit按鈕」按鈕

+0

當進當P1活躍應該跳焦點P2被觸發。 然後如果第二個輸入在p2中被激發並且p2爲空,那麼焦點應該跳到a1。 會發生什麼情況是,代碼根據p1中的輸入正確運行並關注p2,但立即重新關注a1,就好像第二個輸入已被觸發一樣。 對第二個代碼它評估第一個如果爲真,長度大於等於7並且將焦點標識爲p1並且重新聚焦在p2上但是也在else語句內進行(<7)並且將活動元素標識爲p2並且重新對焦在a1上。這就好像我訂購的重點也是用keydown激發了輸入 – mehrlicht

回答

0

您可能會發現使用keyDown會更好。它的設計只會觸發一次。 keyPressed可能會重複。

https://stackoverflow.com/a/15310690/962289

而且,不知道從你的問題,但如果你在兩個不同的地方有$(document).keypress它應該運行他們兩個。你確定他們沒有互相干擾嗎?

+0

問題依然存在。 只有一個代碼。我發佈了兩個具有相同錯誤的版本。 – mehrlicht

0

我的代碼有一些錯誤。

這樣它的工作原理:

$(document).keypress(function (e) { 
    if (e.which == 13) { 
     var focado = document.getElementById(document.activeElement.id); 
     var fim = focado.id.substring(1); 
     var inicio = focado.id.substring(0, 1); 
     var fimseg = fim; 
     var anterior = inicio + (fim - 1); 

     switch (fim) { 
      case "1": 
       fimseg = "2" 
       break; 
      case "2": 
       fimseg = "3" 
       break; 
      case "3": 
       fimseg = "4" 
       break; 
      case "4": 
       fimseg = "5" 
       break; 
     } 
     var seguinte = inicio + (fimseg); 

     if (seguinte == "p5") { 
      seguinte = "a1"; 
     } 

     if (focado.value.length == 0) { 

      if (fim != 1) { 

       document.getElementById(focado.id).focus() 
      } else { 

       if (document.getElementById(anterior).value.length == 0) { 

        document.getElementById(anterior).focus() 
       } else { 

        if (seguinte == "a5") { 

         document.getElementById("btnSubmit").click(); 
        } else { 

         document.getElementById(seguinte).focus() 
        } 
       } 
      } 
     } else { 
          if (focado.value.length < 7 || (isNaN(focado.value))) { 

       document.getElementById(focado.id).innerHtml = ""; 
       if (anterior.value.length == 0) { 

        document.getElementById(anterior).focus() 
       } else { 

        document.getElementById(focado.id).focus() 
       } 
      } else { 

       if (fim != 1) { //não é p1 nem a1 


        if (document.getElementById(anterior).value.length ==0) { 

         document.getElementById(anterior).focus() 
        } else { 

         if (seguinte == "a5") { 

          document.getElementById("btnSubmit").click(); 
         } else { 

          document.getElementById(seguinte).focus() 

         } 
        } 
       } else { 

        document.getElementById(seguinte).focus() 

       } 
      } 
     } 
    } //não é enter 
}); //fim função