2017-10-10 64 views
2

我有一個表單,我想設置它,以便當用戶輸入/選擇輸入值並單擊「添加」按鈕時,它會克隆每個輸入/選擇框,將它們分配給一個變量,然後將它們附加到下面的另一個元素。目前我只是返回[object Object]而不是克隆元素。我哪裏錯了?單擊時,將元素克隆到變量並將其追加到另一個元素

$(function() { 
 
    $('button').click(function() { 
 
    var $name = $('#name').clone(), 
 
     $email = $('#email').clone(), 
 
     $package = $('#package').clone(), 
 
     $newRow = '<div class="name">' + $name + '</div><div class="email">' + $email + '</div><div class="package">' + $package + '</div>'; 
 
     
 
    $('.row').append($newRow); 
 
    }); 
 
});
.row { 
 
    display:table-row; 
 
} 
 
    .row > div { 
 
    display:table-cell; 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="name" /> 
 
<input id="email" /> 
 
<select id="package"> 
 
    <option value="one">Package One</option> 
 
    <option value="two">Package Two</option> 
 
    <option value="three">Package Three</option> 
 
</select> 
 

 
<button>ADD ROW</button> 
 

 
<div class="row"> 
 

 
</div>

+0

Do.you要複製的表單元素或你想要得到的值? – floriangosse

回答

1

追加每個克隆元素自身的股利。然後將所有div添加到行中。

Due to a bug,你必須在克隆的選擇框強制值

$(function() { 
 
    $('button').click(function() { 
 
    var $name = $('<div class="name"></div>').append($('#name').clone()), 
 
     $email = $('<div class="email"></div>').append($('#email').clone()), 
 
     $package = $('<div class="package"></div>').append($('#package').clone()); 
 
     $package.find('#package').val($('#package').val()); 
 
    $('.row').append($name, $email, $package); 
 
    }); 
 
});
.row { 
 
    display:table-row; 
 
} 
 
    .row > div { 
 
    display:table-cell; 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="name" /> 
 
<input id="email" /> 
 
<select id="package"> 
 
    <option value="one">Package One</option> 
 
    <option value="two">Package Two</option> 
 
    <option value="three">Package Three</option> 
 
</select> 
 

 
<button>ADD ROW</button> 
 

 
<div class="row"> 
 

 
</div>


最後一件事。您不應該通過id=識別元素,因爲這些元素在整個頁面中都是唯一的。嘗試重寫你的代碼,以便你可以使用選擇器的類。例如:

<input class="i_name" /> 
... 
$('.i_name').clone() 
+0

這不是一個goos解決方案,因爲最終您在DOM中有多次ID是不允許的,並會傾向於錯誤。 – floriangosse

+0

沒問題,我只需切換到類而不是ID,此解決方案適用於我。 – user13286

+0

你是對的@floriangosse,不應該使用ID作爲選擇器。但是,當您「.clone(ID)」時,您正在克隆第一個圓頂元素。因此,仍然有效。 –

1

您只需將克隆的對象。

$(function() { 
 
    $('button').click(function() { 
 
    var $name = $('#name').clone(), 
 
     $email = $('#email').clone(), 
 
     $package = $('#package').clone(); 
 
     
 
     
 
    $('.row').append($name); 
 
    $('.row').append($email); 
 
    $('.row').append($package); 
 

 

 
    }); 
 
});
.row { 
 
    display:table-row; 
 
} 
 
    .row > div { 
 
    display:table-cell; 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="name" /> 
 
<input id="email" /> 
 
<select id="package"> 
 
    <option value="one">Package One</option> 
 
    <option value="two">Package Two</option> 
 
    <option value="three">Package Three</option> 
 
</select> 
 

 
<button>ADD ROW</button> 
 

 
<div class="row"> 
 

 
</div>

+0

謝謝,但我期望克隆每個元素,而不是提取值,因爲我將添加後續編輯行的功能。 – user13286

+0

不用擔心,謝謝!這與我正在尋找的接近,但我將如何構建HTML佈局,以便輸入和選擇框位於父'div'內而不是存在於DOM中的相同級別上? – user13286

+1

在附加到行之前,只需將元素附加到div中即可。通過使用$ name = $('

').append($ name) – Dale

1

我不完全瞭解你需要什麼,但克隆返回一個對象,這就是爲什麼追加到一個字符串,將返回到[對象的對象。也許你可以使用outerHTML。

$(function() { 
 
    $('button').click(function() { 
 
    var $name = $('#name').clone(); 
 
     $email = $('#email').clone(); 
 
     $package = $('#package').clone(); 
 
     $newRow = '<div class="name">' + $name[0].outerHTML + '</div><div class="email">' + $email[0].outerHTML + '</div><div class="package">' + $package[0].outerHTML + '</div>'; 
 
     
 
    $('.row').append($newRow); 
 
    }); 
 
});
.row { 
 
    display:table-row; 
 
} 
 
    .row > div { 
 
    display:table-cell; 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="name" /> 
 
<input id="email" /> 
 
<select id="package"> 
 
    <option value="one">Package One</option> 
 
    <option value="two">Package Two</option> 
 
    <option value="three">Package Three</option> 
 
</select> 
 

 
<button>ADD ROW</button> 
 

 
<div class="row"> 
 

 
</div>

相關問題