2016-08-27 2 views
0

У меня есть поле ввода, и я хочу, чтобы получить значение входного сигнала, когда вход теряет фокус (если вход пуст) или просто получить значение входа (если вход не пуст)получить входное значение, и если оператор

Моего входа

<input type="text" id="title" value="Value test" kl_virtual_keyboard_secure_input="on"> 

И я стараюсь

var input_length=$.trim($("#title").val()); 

function blurTitleValue() { 
    $('#title').blur(function() { 
     var str = $.trim($("#title").val()); 
     var str_ref = str.substring(0,3); 
     return str_ref; 
    }); 
} 
function TitleValue() { 
    var str = $.trim($("#title").val());; 
    var str_ref = str.substring(0,3); 
    return str_ref; 
} 
if(input_length.length>0) 
{ 
    TitleValue(); 
} 
else{ 
    blurTitleValue(); 
} 
alert(str_ref); 

Но я не могу получить str_ref значение

+1

Мне нравится 99%, что предупреждение (str_ref) не определено. Вам нужно объявить str_ref global, а затем присвоить ему значение с функциями. В вашем случае вы объявляете его локально внутри области функций, и после выхода функции вы не будете иметь переменную str_ref. –

+0

@MykolaBorysyuk: Close - это будет 'ReferenceError', потому что он пытается прочитать значение необъявленного идентификатора. –

+0

Да ... забыть об этом: D ... Но ответ по-прежнему правильный. Ty для исправления. –

ответ

1

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

Попробуйте на JSFiddle.

<script> 
    var input_length = $.trim($("#title").val()); 
    var str_ref; 

    function blurTitleValue() { 
     return $('#title').blur(function() { 
      var str = $.trim($("#title").val()); 
      var str_ref1 = str.substring(0, 3); 
      str_ref = str_ref1; 
     }); 
    } 

    function TitleValue() { 
     var str = $.trim($("#title").val()); 
     ; 
     var str_ref1 = str.substring(0, 3); 
     return str_ref1; 
    } 
    if (input_length.length > 0) { 
     str_ref = TitleValue(); 
    } else { 
     blurTitleValue(); 
    } 
    alert(str_ref); 
</script> 
+0

Обратите внимание, что 'blurTitleValue' никогда ничего не возвращает. И я бы избегал предлагать затенение переменной вроде этого. –

+0

@ T.J.Crowder. Я действительно не обращал внимания. Но, во всяком случае, я думаю, что О.П. Я отредактировал ответ. –

0

То, что вы хотите, это глобальная переменная str_ref. Вам нужно объявить его по всему миру, и удалитеvar перед объявлением str_ref внутри функций. Он будет охватывать переменную функции и при попытке получить доступ к str_ref, вы будете пытаться получить доступ к глобальной переменной (которая в вашем случае равна undefined).

Вот фиксированный код:

var str_ref; 

var input_length = $.trim($("#title").val()); 

function blurTitleValue() { 
    $('#title').blur(function() { 
    var str = $.trim($("#title").val()); 
    str_ref = str.substring(0, 3); 
    return str_ref; 
    }); 
} 

function TitleValue() { 
    var str = $.trim($("#title").val());; 
    str_ref = str.substring(0, 3); 
    return str_ref; 
} 


if (input_length.length > 0) { 
    TitleValue(); 
} else { 
    blurTitleValue(); 
} 

alert(str_ref); 

И JSFiddle.

Также неясно, что вы пытались сделать с blurTitleValue(). В любом случае, вы не сможете получить доступ к новому str_ref, потому что он изменится только на blur.

Я бы также рекомендовал caching ваши элементы jQuery. Вместо того, чтобы всегда запрашивать $('#title'), объявите глобальный var $title = $('#title'); и используйте его впоследствии. Это лучшая практика.

+0

Зачем вы возвращаете 'str_ref'? Это ничего не влияет. –

+0

Это код, предоставленный пользователем. Я только исправил суть. –

Смежные вопросы