У меня очень простая форма с lil bit jQuery внутри. То, что я хочу сделать, это показать ввод текста, если я выбрал конкретную опцию в поле выбора. На этом входе я хочу добавить новую опцию в поле выбора. Он отлично работает, если я не пытаюсь использовать его несколько раз. В первый раз все в порядке. Во второй раз он добавляет мне дополнительное поле с пустым значением и меткой. В 3-й раз он добавляет два пустых поля опций. И так далее ...Почему этот выбор добавляет дополнительную пустую опцию при запуске JS?
Я пытаюсь понять, почему, черт возьми, это происходит. Вот код превью и демо: http://jsfiddle.net/rx5orekb/ HTML:
<form action="#" class="source">
<select id="source">
<option value="none">None</option>
<option value="source-xyz">Source XYZ</option>
<option value="something-else">Something Else</option>
<option value="add-new">Add New Source</option>
</select>
<input type="text" placeholder="Type name and hit enter" value="" style="display: none" />
</form>
JS:
var Form = {
addNewSource: function(form, select, newSource) {
select.hide();
newSource.show().focus();
form.on('submit', function(event) {
event.preventDefault();
var label = newSource.val(),
html = '<option value="'+label+'">'+label+'</option>';
select.show().find('option[value=add-new]').before(html);
select.val(label);
newSource.hide().val('');
});
return false;
},
sourceAppendix: function() {
var select = $('.source').find('select');
select.on('change', function() {
var v = $(this).val(),
form = $(this).parents('.source'),
newSource = form.find('input');
if(v == 'add-new') {
Form.addNewSource(form, $(this), newSource);
}
});
}
}
$(document).ready(function() {
Form.sourceAppendix();
});
Спасибо большое!
Вы складываете несколько событий отправки. Каждый раз, когда вы вызываете 'addNewSource', вы добавляете новый – Johan
@Johan, это правда, я не понимал, что:/ –