2011-10-12 26 views
8

Tôi có một biểu mẫu với một vài trường nhập. Vì vậy, tôi muốn điều hướng giữa các trường bằng nút tiếp theo nhưng điều đó chỉ hoạt động khi loại trường nhập là "số". Với loại = "văn bản" nó không!Tại sao chế độ xem web trên Android hiển thị "Tiếp theo" trong bàn phím chỉ khi type = "number" chứ không phải với type = "text"?

Đây có phải là lỗi trong Android 3.2.1 không?

lĩnh vực đầu vào của tôi là như thế:

<input type="text" name="..." .... /> --> keyboard "Go" 
<input type="text" name="..." .... /> --> keyboard "Go" 
<input type="number" name="..." .... /> --> here it shows the "Next" button on the keyboard 
<input type="text" name="..." .... /> --> keyboard "Go" 

Trả lời

0

Tôi cho rằng bạn cần phải xác định rằng đầu vào của bạn không phải là một đầu vào multiline, nếu không, tiếp theo sẽ được thay thế bởi sau

+0

tôi đặt một ví dụ trong câu hỏi của tôi. – user930141

0

Khi webkit làm cho những đầu vào các trường, nó chuyển đổi chúng thành một lớp được gọi là android.webkit.WebTextView xác định cách softkeyboard trông như thế nào và dường như không có cách nào tốt để ghi đè lên tập hợp ImeOptions bởi lớp WebTextView

2

DennisA phù hợp với Android 4 .0 và dưới đây.

Tóm lại, đây không phải là lỗi nhưng thật đáng buồn khi Google triển khai nó (tôi thích GO nhất quán cho tất cả các khóa đó để bạn có thể ngăn chặn hành động mặc định trong JavaScript).

Với Android 4.1 (Jellybean), bạn có thể thay đổi hành vi mặc định bằng cách mở rộng WebViewInputConnection: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/webkit/WebViewClassic.java#L379

(hackery tham gia)

+0

Tôi không rõ ràng về cách thực hiện công việc này. Cả WebViewInputConnection và đầu vào cần thiết WebViewCore.TextFieldInitData dường như nằm ngoài tầm với. Bạn có một ví dụ về cách bạn đã làm điều này? Cảm ơn. –

+1

liên kết đó đã chết; ITYM https://github.com/android/platform_frameworks_base/blob/jb-release/core/java/android/webkit/WebViewClassic.java#L362 nhưng thực tế là nó đã chết khiến tôi nghi ngờ nó sẽ hoạt động trong 4.2: / – Chani

-1

Tôi hy vọng nó sẽ giúp đỡ người khác. Tôi đã xử lý nó trong javascript. Tôi đã viết mã javascript để hiển thị nút tiếp theo ở phía bên phải của mọi đầu vào và chọn điều khiển. Khi người dùng chạm vào nút tiếp theo, nó sẽ chuyển sang điều khiển tiếp theo. Tôi đã viết mã sau đây cho việc này:

 //Move to next crontrol bock 
    var MOVE_TO_NEXT_ID = 'aNext86332'; 
    function bindNext() { 
     var allTags = document.getElementsByTagName('*'); 
     for (var intEle = 0; intEle < allTags.length; intEle++) { 
      if (allTags[intEle].tagName.toLowerCase() == 'input' || allTags[intEle].tagName.toLowerCase() == 'textarea' || allTags[intEle].tagName.toLowerCase() == 'select') { 
       allTags[intEle].addEventListener("focus", function() { 
        //find next input 
        var nextFocus = null; 
        var all = document.getElementsByTagName('*'); 
        var flag = 0; 
        for (var j = 0 ; j < all.length; j++) { 
         if (flag == 1) { 
          if (all[j].tagName.toLowerCase() == 'input' || all[j].tagName.toLowerCase() == 'textarea' || all[j].tagName.toLowerCase() == 'select') { 
           var t = allTags[j]; 
           try { 
            if (t.style.display == 'none') { 
             continue; 
            } 
            else if (t.parentElement.style.display == 'none') { 
             continue; 
            } 
            else if (t.parentElement.parentElement.style.display == 'none') { 
             continue; 
            } 
            else if (t.parentElement.parentElement.parentElement.style.display == 'none') { 
             continue; 
            } 
            else { 
             nextFocus = allTags[j]; 
             break; 
            } 
           } 
           catch (e) { } 
          } 
         } 
         if (this.id == all[j].id) { 
          flag = 1; 
         } 
        } 
        showNext(this, nextFocus); 

       }); 
       allTags[intEle].addEventListener("blur", function() { 
        removeNext(this); 
       }); 
      } 
     } 
    } 
    function moveToNextControl(me, nextObj) { 
     if (nextObj != null) { 
      nextObj.focus(); 
      nextObj.scrollIntoView(true); 
     } 
    } 
    function removeNext(me) { 
     setTimeout(function() { 
      try { 
       var next = document.getElementById(MOVE_TO_NEXT_ID); 
       me.parentElement.removeChild(next); 
      } 
      catch (e) { } 
     }, 300); 
    } 
    function showNext(me, nextObj) { 
     setTimeout(function() { 
      var next = document.createElement("a"); 
      next.className = 'btn btn-default animated fadeIn'; 
      next.innerHTML = 'Next'; 
      next.style.position = 'absolute'; 
      next.style.zIndex = 1; 
      next.style.top = '0'; 
      next.id = MOVE_TO_NEXT_ID; 
      next.style.left = (me.clientWidth - 40) + 'px'; 
      next.addEventListener("click", function() { 
       moveToNextControl(me, nextObj); 
      }); 
      me.parentElement.appendChild(next); 
     }, 500); 

    } 
    //End of Move to next crontrol bock 

sau đó được gọi bindNext chức năng như sau:

window.onload = function() { 
     bindNext(); 
    } 
Các vấn đề liên quan