#javascript #jquery #html #css
#javascript #jquery #HTML #css
Вопрос:
У меня есть простая настройка javascript, которая создает или удаляет поля в зависимости от того, сколько хочет пользователь. Но когда пользователь нажимает кнопку добавить, чтобы создать другое поле, пробел между полями и элементами полностью исчезает. К нему не применяются отступы или поля, и даже если вы применяете поле, разница все равно остается.
Вот часть, которая повторяется
<div class="tax-cont">
<input type="text" class="form-control inline-field md" placeholder="Tax Name">
<div class="input-group inline-group md">
<input type="text" class="form-control" placeholder="Value">
<label class="input-group-addon"><i class="fa fa-percent"></i></label>
</div>
<a class="addRemove btn btn-success btn-round btn-sm"><i class="fa fa-plus"></i></a>
</div>
И javascript
// Add or Remove additional departure dates
var taxContent = '<div class="tax-cont"><input type="text" class="form-control inline-field md" placeholder="Tax Name"><div class="input-group inline-group md"><input type="text" class="form-control" placeholder="Value"><label class="input-group-addon"><i class="fa fa-percent"></i></label></div><a class="addRemove btn btn-danger btn-round btn-sm"><i class="fa fa-minus"></i></a></div>';
$('.tax-cont .addRemove.btn-success').on('click', function(){
var lastTaxbox = $('.tax-cont').last();
lastTaxbox.after($(taxContent));
});
$('.form-group').on('click', '.btn-danger', function(){
$(this).parent().remove();
});
Вот как это выглядит
Я не могу понять, почему это вообще происходит. Вот codepen для демонстрации.
Комментарии:
1. Это из-за
display:inline-block
проблемы: css-tricks.com/fighting-the-space-between-inline-block-elements2. вам нужны новые с пробелом или первый без него?
3. да, вероятно, это из-за этого. на панели html у вас есть пробелы / табуляции / новые строки, и это создает эффект «ложного» поля. В javascript нет пробелов / табуляций / новых строк, и именно поэтому у вас нет поля.
4. Это кажется очевидным. Спасибо, что указали на это
Ответ №1:
Это происходит из-за того, как inline
inline-block
элементы и ведут себя, когда дело доходит до пробелов. В вашем исходном html
источнике есть новая строка между <input>
и <div>
. Который является пробелом и который приведет к пробелу между двумя элементами на вашей странице.
<input type="text" class="form-control inline-field md" placeholder="Tax Name"> <!-- new line -->
<div class="input-group inline-group md"> ... </div>
Однако, когда вы используете Javascript для добавления элементов в свой DOM
, пробелы не node
добавляются. Так что это просто склеит их вместе. Если вы удалите новую строку из своего исходного источника, два ввода также будут склеены вместе.
В качестве решения вы можете использовать margin-right
<input>
или margin-left
на следующем <div>
, чтобы убедиться, что все строки поддерживают одинаковый интервал.
Ответ №2:
Как указывали другие, причина отсутствия пробела между вставленным набором заключается в том, что между их кодом нет пробела. Спасибо Николасу за то, что поделился ссылкой, которая хорошо это объясняет.
Чтобы устранить проблему, я добавил пробел в код javascript ( amp;nbsp;
), который создает то же пространство, что и исходный DOM.
var taxContent = '<div class="tax-cont"><input type="text" class="form-control inline-field md" placeholder="Tax Name">amp;nbsp;<div class="input-group inline-group md"><input type="text" class="form-control" placeholder="Value"><label class="input-group-addon"><i class="fa fa-percent"></i></label></div>amp;nbsp;<a class="addRemove btn btn-danger btn-round btn-sm"><i class="fa fa-minus"></i></a></div>';