2014-07-08 2 views
0

Я хотел бы сгенерировать текст «на лету», взяв данные из двух полей ввода после их компиляции. Я думал о размытии функции, но хотел бы сгенерировать текст только тогда, когда оба поля ввода имеют значение. В то время я делал только одно поле за один раз, но один перезаписывал другой.JQuery размытие после нескольких полей, скомпилированных

<p><input type="text" name="name" id="name" /></p> 
<p><input type="text" name="sname" id="sname" /></p> 
<p><input type="text" name="text" id="text" /></p> 

JS

$("#name").blur(function(){ 

    var str = $("#name").val(); 
    var n = str.substring(0, 1); 
    $('#text').val(n); 
}); 

$("#sname").blur(function(){ 

    var str = $("#sname").val(); 
    var s = str.replace(/[_\W]+/g, "") 
    $('#text').val(s); 
}); 

http://jsfiddle.net/f58fn/

Как я могу это сделать? спасибо

+0

Начните с этого и посмотреть, если вы можете работать остальные из 'если ($ ('# что-то') Вал() = '') {} ' – Popnoodles

+0

@Popnoodles - Извините, но я не понимаю вашего ответа. –

ответ

1

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

<p><input type="text" name="name" class="input" id="name" /></p> 
<p><input type="text" name="sname" class="input" id="sname" /></p> 
<p><input type="text" name="text" id="text" /></p> 

$('.input').blur(function(){ 
    var value = $("#sname").val() + $("#name").val() 
    $("#text").val(value); 
}); 

Это имеет преимущество, нуждаясь один меньше обработчика событий, хотя в первый раз, когда вы Bler от «#NAME «он будет бесполезно запрашивать значение« #sname », но это будет довольно незначительным накладным расходами.

+0

Вы удалили OP 'str.replace' и' str.substring' – Popnoodles

2

В принципе, ваша логика правильная, но вам нужна проверка, действительно ли введенные данные заполнены.

Вот как я хотел бы сделать это:.!

$("#name, #sname").bind('input', function() { 
    //May you want to show the user that only certain chars are allowed 
    var n = $("#name").val($("#name").val().substring(0, 1)).val(); 
    var s = $("#sname").val($("#sname").val().replace(/[_\W]+/g, "")).val(); 
    //check if the input fulfills your needings (may inlcude a check for space, etc.) 
    if ($("#sname").val().length && $("#name").val().length) { 
     $('#text').val(n + s); 
    } 
}); 

Demo

+1

Почему вы выполняете одну и ту же подстроку и дважды заменяете функции? – Popnoodles

+0

@ Поппулы вы совершенно правы :) - скорректировал ответ –

+1

+1 Хорошо. Кроме того, нет необходимости в '> 0' при проверке длины, поскольку в любом случае он возвращает false/правду – Popnoodles

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