2016-10-11 7 views
1

ユーザーがどれだけ多くのフィールドを必要とするかによってフィールドを作成または削除するシンプルな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(); 
    }); 

Screenshot

これは全く起こっている理由を私は理解できません。ここにはcodepenがあります。

+4

それは理由 'ディスプレイのためです:インラインblock'問題:https://css-tricks.com/fighting-the-space-between-inline-block-elements/ – nicholas

+0

あなたはと新しいものが欲しいですスペースやそれなしの最初のもの? – Aschab

+2

ええ、それはおそらくそれのためです。 htmlパネルにはスペース/タブ/改行があり、これがこの "偽"マージン効果になります。 javascriptにスペース/タブ/改行はなく、余裕がないのはそのためです。 – AlFra

答えて

4

これは、空白になると、inlineinline-block要素が動作するために起こります。元のhtmlソースには、<input><div>の間に新しい行があります。これは空白で、ページ上の2つの要素の間に空白が入ります。

<input type="text" class="form-control inline-field md" placeholder="Tax Name"> <!-- new line --> 
<div class="input-group inline-group md"> ... </div> 

あなたDOMに要素を追加するためにJavascriptを使用している場合しかし、nodeが追加に空白はありません。それでは、2つを一緒に貼り付けるだけです。元のソースから新しい行を削除すると、2つの入力も一緒に固定されます。あなたはすべての行が同じ間隔を維持を確認するために、次の<div><input>またはmargin-leftmargin-rightを使用できるソリューションとして

0

他の人が指摘しているように、挿入されたセットの間にスペースがない理由は、コード間にスペースがないからです。それをよく説明するlinkを共有してくれたnicholasに感謝します。

問題を修正するために、元のDOMと同じ領域を生成するjavascriptコード(&nbsp;)に空白を追加しました。

var taxContent = '<div class="tax-cont"><input type="text" class="form-control inline-field md" placeholder="Tax Name">&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>&nbsp;<a class="addRemove btn btn-danger btn-round btn-sm"><i class="fa fa-minus"></i></a></div>'; 
関連する問題