上我試圖用這個引導程序片段: http://bootsnipp.com/snippets/featured/dynamic-form-fields-add-new-field-on-focus-or-change引導動態輸入選擇 - 多個同一頁
我使用這2個不同模態對話框在同一頁面上。
我實現它,因爲他們認爲上面的鏈接:
HTML:
<div class="container">
<h3>Selects</h3>
<div class="row">
<div class="form-group form-group-multiple-selects col-xs-11 col-sm-8 col-md-4">
<div class="input-group input-group-multiple-select col-xs-12">
<select class="form-control" name="values[]">
<option value="">Select one</option>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
<option value="4">Option 4</option>
</select>
<span class="input-group-addon input-group-addon-remove">
<span class="glyphicon glyphicon-remove"></span>
</span>
</div>
</div>
</div>
</div>
的Javascript:
/*
Text fields
*/
$(function(){
$(document).on('focus', 'div.form-group-options div.input-group-option:last-child input', function(){
var sInputGroupHtml = $(this).parent().html();
var sInputGroupClasses = $(this).parent().attr('class');
$(this).parent().parent().append('<div class="'+sInputGroupClasses+'">'+sInputGroupHtml+'</div>');
});
$(document).on('click', 'div.form-group-options .input-group-addon-remove', function(){
$(this).parent().remove();
});
});
/*
Selects
*/
$(function(){
var values = new Array();
$(document).on('change', '.form-group-multiple-selects .input-group-multiple-select:last-child select', function(){
var selectsLength = $('.form-group-multiple-selects .input-group-multiple-select select').length;
var optionsLength = ($(this).find('option').length)-1;
if(selectsLength < optionsLength){
var sInputGroupHtml = $(this).parent().html();
var sInputGroupClasses = $(this).parent().attr('class');
$(this).parent().parent().append('<div class="'+sInputGroupClasses+'">'+sInputGroupHtml+'</div>');
}
updateValues();
});
$(document).on('change', '.form-group-multiple-selects .input-group-multiple-select:not(:last-child) select', function(){
updateValues();
});
$(document).on('click', '.input-group-addon-remove', function(){
$(this).parent().remove();
updateValues();
});
function updateValues()
{
values = new Array();
$('.form-group-multiple-selects .input-group-multiple-select select').each(function(){
var value = $(this).val();
if(value != 0 && value != ""){
values.push(value);
}
});
$('.form-group-multiple-selects .input-group-multiple-select select').find('option').each(function(){
var optionValue = $(this).val();
var selectValue = $(this).parent().val();
if(in_array(optionValue,values)!= -1 && selectValue != optionValue)
{
$(this).attr('disabled', 'disabled');
}
else
{
$(this).removeAttr('disabled');
}
});
}
function in_array(needle, haystack){
var found = 0;
for (var i=0, length=haystack.length;i<length;i++) {
if (haystack[i] == needle) return i;
found++;
}
return -1;
}
});
可正常工作完全,當僅使用一次在頁。但是當在同一頁面上使用它兩次時,它們會發生衝突並且無法正確工作。我試着把所有的id改爲idname2(最後用2),並且做了一個整個javascript的副本,並在最後以2替換所有的id名稱。雖然這可行,但它也是一種非常糟糕的實施方式。
你能幫我弄清楚我該如何實現它,這樣我可以在同一頁面上至少使用2次剪切?任何幫助將非常感激。
只是一個建議,但是,你有沒有考慮過使用KnockoutJS呢? http://knockoutjs.com/examples/betterList.html&http://knockoutjs.com/examples/gridEditor.html,上面的一個解決方案是將父級包裝dom元素傳遞給所有引用的jquery選擇器在那個代碼中的類,但它可能會更清潔,如果你嘗試了KO,並有一個可觀察數組的每個你想要的選擇列表的視圖模型 – Pricey
@Pricey不知道KnockoutJS,我會看看它。它可以與下拉菜單一起使用嗎? - 我喜歡上面的代碼片段的原因是它是用bootstrap製作的,我不需要加載任何外部JavaScript庫。你能解釋我是如何開始包裝dom元素的?我沒有那種經驗的JavaScript,但我打開試試看。 – Bolli
我一直使用bootstrap和Knockout,我建議你嘗試KO教程http://learn.knockoutjs.com/,如果你對JavaScript不太熟悉,那將會更加簡單和可靠。 – Pricey