JQuery Вопрос - Добавить значение в скрытое поле ввода? - PullRequest
0 голосов
/ 22 ноября 2010

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

Итак:

<input type="text" name="firstname" value="John John" />
<input type="text" name="lastname" value="Doe" />
<input type="hidden" name="name" value="john-john-doe" />

Я пытался использовать следующий код, но он не работает ...

            $('input[name=field_firstname[0][value]]').keyup(function() {
                    var firstname = $('input[name=field_firstname[0][value]]').val();
                    var lastname = $('input[name=field_lastname[0][value]]').val();
                    $('input[name=name]').val(firstname.replace(/\s/g, "-").toLowerCase()+lastname.replace(/\s/g, "-").toLowerCase());
            });

            $('input[name=field_lastname[0][value]]').keyup(function() {
                    var firstname = $('input[name=field_firstname[0][value]]').val();
                    var lastname = $('input[name=field_lastname[0][value]]').val();
                    $('input[name=name]').val(firstname.replace(/\s/g, "-").toLowerCase()+lastname.replace(/\s/g, "-").toLowerCase());
            });

Ответы [ 2 ]

3 голосов
/ 22 ноября 2010

Возможно, мне не хватает некоторого контекста, но я не думаю, что вы можете использовать такие селекторы атрибутов. Чтобы попасть в поле имени, вы бы сказали: input[name='firstname'].

Вы также делаете одно и то же дважды, что всегда является хорошим поводом для того, чтобы задуматься. Например, вы можете сделать оба keyup с за один выстрел:

$("input[name='firstname'], input[name='lastname']").keyup(...);

Вы можете сделать вещи намного проще, используя идентификаторы. Например, возьмите этот HTML:

<input type="text" name="firstname" id="firstname" value="John John" />
<input type="text" name="lastname" id="lastname" value="Doe" />
<input type="hidden" name="name" id="sanitized_name" value="john-john-doe" />

Вы бы использовали следующий фрагмент кода:

$('#firstname, #lastname').keyup(function() {
  var fullname = $('#firstname').val() + ' ' + $('#lastname').val();
  $('#sanitized_name').val(fullname.replace(/\s/g, '-').toLowerCase());
});
0 голосов
/ 22 ноября 2010

Пропустить [0][value] как в:

$('input[name=field_firstname]') // removed [0][value]

Не совсем уверен, почему вы положили это туда.

Кроме того, вы можете использовать .blur() вместо .keyup(), экономит много лишних повторений.Еще лучше конкатить поля на .submit(), потому что это когда вы все равно заботитесь об этом.Подумайте об этом, «Jhon Doe» означает 16 поисков и 8 конкатенаций при использовании .keyup() вместе с процессами jQuery для этого.

addendum

Видя этоНесколько раз люди помещали недопустимые / проблемные символы в атрибуты id, такие как [0][value], это недопустимо для jQuery, поскольку он распознает его как выражение css, а не как часть id.document.getElementById( "bla[0]" );, похоже, действительно работает, поэтому, если вам действительно нужно (или вам лень это исправить), вы можете сделать следующее:

$( document.getElementById( "bla[0][value]" ) ) //etc
...