2013-12-02 3 views
1

У меня проблема с фокусом на javascript, если если time_start> 24, то предупреждение о java-скрипте показывало затем фокус или автофайлы в этом текстовом поле. но фокус не работает, я не знаю, почему это небольшая проблема, но, пожалуйста, проверьте это.Javascript Focus с использованием .focus()

Javascript

function start_time(){ 

    var time_start = document.getElementById("start_t").value; 
    if(time_start > 24){ 
     alert("Invalid Start time hours"); 
     document.getElementById('start_t').focus(); 
    } 
} 

HTML

<input type="text" size="2" value="00" name="start" id="start_t" style="text-align: center;" onchange="start_time()">: 

Я хочу сделать это в значении недействителен автоматически фокусируется на этом текстовом поле

+0

«00» является string, а не целое число – Hellgorithm

ответ

1

Я знаю, что такое решение, которое работает, но не имеют действительную причину работает. Есть две проблемы с вашим кодом

  1. сравнивающие строки с Integer

    function start_time(){ 
        var time_start = document.getElementById("start_t").value; 
        // time_start is a string. convert it into Integer first 
        if(time_start > 24){ // you are comparing integer with string 
         alert("Invalid Start time hours"); 
         document.getElementById('start_t').focus(); 
        } 
    } 
    

    вам необходимо изменить эту функцию, как показано ниже

    function start_time(){ 
        var time_start = parseInt(document.getElementById("start_t").value; 
        if(isNaN(time_start) || time_start > 24){ 
         alert("Invalid Start time hours"); 
         document.getElementById('start_t').focus(); 
        }    
    } 
    
  2. делая акцент на change события. Для input type='text' событие изменения запускается при размытии. Я столкнулся с проблемами, когда я помещал поле в фокус, используя JavaScript в событии «change». см. fiddle. Для преодоления проблемы существуют два решения:

    a. либо сделайте то, что вы делаете, нажав кнопку, см. fiddle

    b.или сделать фокус с тайм-аутом, fiddle

    setTimeout(function() { document.getElementById('start_t').focus()} ,1); 
    

PS: Пожалуйста, обратите внимание мое использование JQuery в скрипках, я немного ленивым в использовании встроенных функций JavaScript

3

Ваши значения строк и вы» повторное сравнение целых чисел. Вам нужно проанализировать значение и преобразовать его в целое число.

Изменение:

var time_start = document.getElementById("start_t").value; 

To:

var time_start = parseInt(document.getElementById("start_t").value, 10); 

Если вы используете JQuery, как ваши метки показывают, вы должны делать это.

var time_start = parseInt($('#start_t').val(), 10); 

Кроме того, если вы используете JQuery вы можете установить фокус на элемент, как это:

$('#start_t').focus(); 

Попробуйте переключить ваше предупреждение в диалоге подтверждения, чтобы иметь возвращаемое значение, а затем установите фокус.

Пожалуйста, измените это:

if (time_start > 24) { 
    alert("Invalid Start time hours"); 
    document.getElementById('start_t').focus(); 
} 

Для этого:

if (time_start > 24) { 
    var r = confirm("Invalid Start time hours"); 

    if (r) { 
     $('#start_t').focus(); 
    } 
} 

Проверить эту скрипку: http://jsfiddle.net/sm4Nk/

+0

, если start_t находится выше 24, что текстовое поле автоматически фокусируется. это я хочу сделать sir – wewe

+1

_The способ работы с JavaScript заключается в том, что он покажет вам диалоговое окно с предупреждением, а затем установите фокус на ваш элемент сразу после отображения предупреждения. JavaScript не ждет вашего ввода в диалоговом окне предупреждения, он продолжит выполнение скрипта. Это неправда, пожалуйста, проверьте [скрипка] (http://jsfiddle.net/su9SL/) – vdua