2011-01-08 2 views
2

Я хотел бы иметь выпадающий список с вариантами A, B, C и Custom. Когда выбрано таргетинг, выпадающее меню будет заменено текстовым полем, чтобы пользователь мог указать собственное имя, если он этого захочет.Выпадающий список в текстовое поле с jQuery?

Итак, первый у нас есть что-то вроде этого

<select id="foo" name="foo"> 
    <option value="a">A</option> 
    <option value="b">B</option> 
    <option value="c">C</option> 
    <option value="custom">Custom</option> 
</select> 

И после того, как выбран пользовательский, весь выпадающий список превращалась бы это:

<input name="foo" type="text" /> 
+0

Нужно ли менять его с новой добавленной опцией? – jcuenod

+2

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

+0

@ Габи: это хорошая точка зрения. – randomguy

ответ

5

Вот demo с помощью функции .replaceWith():

$('#foo').change(function() { 
    if ($(this).val() === 'custom') { 
     $(this).replaceWith('<input name="foo" type="text" />'); 
    } 
}); 
0
$('#foo').click(
function() 
{ 
if($(this).val()==="custom") 
{ 
//either toggle the select and input button 
//or add markup here. and clear the old amrkup 
} 

}); 
+0

Не будет ли это срабатывать только тогда, когда пользователь выбирает пользовательский клик по выпадающему меню? – jcuenod

1

Как об этом:

$('select.foo').bind('change', function(event) { 
if ($(this).val() == "Custom") 
{ 
    $(this).hide() 
    $("input.foo").show() 
} 
}); 

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

+0

Добавление его в качестве опции на самом деле довольно крутая идея! – randomguy

1

Вот способ сделать это, не скрывая поле выбора, для лучшего удобства пользователей в соответствии с приведенным выше @Gaby.

Он отображает текстовое поле, когда выбрана опция «Пользовательский» и скрывает ее, когда выбрано что-либо еще.

$('#foo').change(function() 
    { 
     var $this = $(this), 
     id = $this.attr('id'), 
     $txt = $('input:text[name=' + id + ']'); 
     if ($this.val() == 'custom') 
     { 
     if ($txt.length == 0) 
     { 
      $txt = $('<input type="text" name="'+ id +'" />'); 
      $this.after($txt); 
      } 
      $txt.show().focus(); 
     } 
     else 
     { 
      $txt.hide(); 
     } 
}); 
Смежные вопросы