我在bootstrap中有一个动态表单,我想根据选择使用不同的字段向其添加表单。如果选定的选项是球体,则表单应包含直径,位置,颜色和材质字段,如果是三角形,则需要添加其他字段(如图所示)。我试图隐藏我不需要使用jQuery hide()添加的字段,但它不起作用。如果您让我知道我的代码有什么问题,我将不胜感激。
HTML:
<div class="row" id="dynamic_form">
<div class="form-group form-horizontal">
<label class="control-label">Primitives</label>
<div class="form-inline">
<select class="input-small form-control" id="primitive-selector" name="PrimitiveChoose[]">
<!-- <option value=" " disabled="" selected="">primitive</option> -->
<option value="sphere">sphere</option>
<option value="triangle">triangle</option>
</select>
<input type="number" class="input-small form-control" id="diameter" name="Diameter[]" step="any" placeholder="diameter(D)">
<input type="text" class="input-small form-control" id="sphere-position" name="SpherePosition[]" placeholder="(x, y, z)">
<select class="input-small form-control" id="material-selector" name="MaterialSelect[]">
<option value=" " disabled="" selected="">material</option>
<option value="normal">opaque</option>
<option value="glass">glass</option>
<option value="mirror">mirror</option>
</select>
<select class="input-small form-control" id="circle-color-selector" name="CircColorSelect[]">
<option value=" " disabled="" selected="">color</option>
<option value="red">red</option>
<option value="blue">blue</option>
<option value="green">green</option>
<option value="yellow">yellow</option>
</select>
<button type="button" class="btn btn-success btn-add" id="add_more"> <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
</button>
</div>
</div>
</div>
JavaScript的:
function getHTMLString(formCount) {
var complex_html = [
'<div class="form-inline">',
'<select class="input-small form-control" id="primitive-selector'+ formCount +'" name="PrimitiveChoose[]">',
'<option value=" " disabled selected>primitive</option>',
'<option value="sphere">sphere</option>',
'<option value="triangle">triangle</option>',
'</select> ',
'<input type="number" class="input-small form-control" id="diameter'+ formCount +'" name="Diameter[]" step="any" placeholder="diameter(D)"> ',
'<input type="text" class="input-small form-control" id="sphere-position'+ formCount +'" name="SpherePosition[]" placeholder="(x, y, z)"> ',
'<input type="text" class="input-small form-control" id="A-position'+ formCount +'" name="VerticeAPosition[]" placeholder="(x, y, z)"> ',
'<input type="text" class="input-small form-control" id="B-position'+ formCount +'" name="VerticeBPosition[]" placeholder="(x, y, z)"> ',
'<input type="text" class="input-small form-control" id="C-position'+ formCount +'" name="VerticeCPosition[]" placeholder="(x, y, z)"> ',
'<select class="input-small form-control" id="circle-color-selector'+ formCount +'" name="CircColorSelect[]">',
'<option value=" " disabled selected>color</option>',
'<option value="red">red</option>',
'<option value="blue">blue</option>',
'<option value="green">green</option>',
'<option value="yellow">yellow</option>',
'</select> ',
'<button type="button" class="btn btn-success btn-add" id="remove_more'+formCount+'"> <span class="glyphicon glyphicon-minus" aria-hidden="true"></span>',
'</button>',
'</div>',
].join('');
return complex_html;
}
$(document).ready(function() {
var formCount = 0;
$('#add_more').on('click', function(e) {
if (formCount < 4) {
var html = getHTMLString(formCount);
var element = $(html);
$('#dynamic_form .form-group').append(html);
$('#primitive-selector'+formCount).on('change', function(){
if($(this).val() === "sphere"){
$('#A-position'+ formCount).hide();
$('#B-position'+ formCount).hide();
$('#C-position'+ formCount).hide();
} else {
$('#diameter'+ formCount).hide();
$('#sphere-position'+ formCount).hide();
}
});
} else {
return;
}
formCount++;
});
$('#dynamic_form').on("click","#remove_more"+formCount, function(e){ //user click on remove text
e.preventDefault(); $(this).parent('div').remove(); formCount--;
});
});
答案 0 :(得分:1)
而是添加更改事件处理程序:
$('#primitive-selector'+formCount).on('change', function(){
内部:
$('#add_more').on('click', function(e) {
您可以作为委派活动直接附加到文档:
$(document).on('change', '[id^=primitive-selector]', function(e) {
var formCount = this.id.replace('primitive-selector', '');
var TselectorString = '#A-position'+ formCount + ', #B-position'+ formCount +
', #C-position'+ formCount;
var SselectorString = '#diameter'+ formCount + ', #sphere-position'+ formCount +
', #material-selector'+ formCount + ', #circle-color-selector'+ formCount
var bIsS = $(this).val() === "sphere";
$(SselectorString).toggle(bIsS);
$(TselectorString).toggle(!bIsS);
});
以同样的方式委派remove事件。
我使用了jQuery Attribute Starts With Selector [name^=”value”]而不是id。
摘录:
function getHTMLString(formCount) {
var complex_html = [
'<div class="form-inline">',
'<select class="input-small form-control" id="primitive-selector'+ formCount +'" name="PrimitiveChoose[]">',
'<option value=" " disabled selected>primitive</option>',
'<option value="sphere">sphere</option>',
'<option value="triangle">triangle</option>',
'</select> ',
'<input type="number" class="input-small form-control" id="diameter'+ formCount +'" name="Diameter[]" step="any" placeholder="diameter(D)"> ',
'<input type="text" class="input-small form-control" id="sphere-position'+ formCount +'" name="SpherePosition[]" placeholder="(x, y, z)"> ',
'<input type="text" class="input-small form-control" id="A-position'+ formCount +'" name="VerticeAPosition[]" placeholder="(x, y, z)"> ',
'<input type="text" class="input-small form-control" id="B-position'+ formCount +'" name="VerticeBPosition[]" placeholder="(x, y, z)"> ',
'<input type="text" class="input-small form-control" id="C-position'+ formCount +'" name="VerticeCPosition[]" placeholder="(x, y, z)"> ',
'<select class="input-small form-control" id="material-selector'+ formCount +'" name="MaterialSelect[]">',
'<option value=" " disabled="" selected="">material</option>',
'<option value="normal">opaque</option>',
'<option value="glass">glass</option>',
'<option value="mirror">mirror</option>',
'</select>',
'<select class="input-small form-control" id="circle-color-selector'+ formCount +'" name="CircColorSelect[]">',
'<option value=" " disabled selected>color</option>',
'<option value="red">red</option>',
'<option value="blue">blue</option>',
'<option value="green">green</option>',
'<option value="yellow">yellow</option>',
'</select> ',
'<button type="button" class="btn btn-success btn-add" id="remove_more'+formCount+'"> <span class="glyphicon glyphicon-minus" aria-hidden="true"></span>',
'</button>',
'</div>',
].join('');
return complex_html;
}
var formCount = 0;
$(document).on("click", "[id^=remove_more]", function(e){ //user click on remove text
e.preventDefault();
$(this).closest('div.form-inline').remove();
formCount--;
});
$(document).on('change', '[id^=primitive-selector]', function(e) {
if (this.id == 'primitive-selector') {
//return;
}
var formCount = this.id.replace('primitive-selector', '');
var TselectorString = '#A-position'+ formCount + ', #B-position'+ formCount +
', #C-position'+ formCount;
var SselectorString = '#diameter'+ formCount + ', #sphere-position'+ formCount +
', #material-selector'+ formCount + ', #circle-color-selector'+ formCount
var bIsS = $(this).val() === "sphere";
$(SselectorString).toggle(bIsS);
$(TselectorString).toggle(!bIsS);
});
$(document).ready(function() {
$('[name^="VerticeCPosition"]').hide();
$('#add_more').on('click', function(e) {
if (formCount < 4) {
var html = getHTMLString(formCount);
var element = $(html);
$('#dynamic_form .form-group').append(html);
} else {
return;
}
formCount++;
});
});
&#13;
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<div class="row" id="dynamic_form">
<div class="form-group form-horizontal">
<label class="control-label">Primitives</label>
<div class="form-inline">
<select class="input-small form-control" id="primitive-selector" name="PrimitiveChoose[]">
<!-- <option value=" " disabled="" selected="">primitive</option> -->
<option value="sphere">sphere</option>
<option value="triangle">triangle</option>
</select>
<input type="number" class="input-small form-control" id="diameter" name="Diameter[]" step="any" placeholder="diameter(D)">
<input type="text" class="input-small form-control" id="sphere-position" name="SpherePosition[]" placeholder="(x, y, z)">
<input type="text" class="input-small form-control" id="A-position" name="VerticeAPosition[]" placeholder="(x, y, z)">
<input type="text" class="input-small form-control" id="B-position" name="VerticeBPosition[]" placeholder="(x, y, z)">
<input type="text" class="input-small form-control" id="C-position" name="VerticeCPosition[]" placeholder="(x, y, z)">
<select class="input-small form-control" id="material-selector" name="MaterialSelect[]">
<option value=" " disabled="" selected="">material</option>
<option value="normal">opaque</option>
<option value="glass">glass</option>
<option value="mirror">mirror</option>
</select>
<select class="input-small form-control" id="circle-color-selector" name="CircColorSelect[]">
<option value=" " disabled="" selected="">color</option>
<option value="red">red</option>
<option value="blue">blue</option>
<option value="green">green</option>
<option value="yellow">yellow</option>
</select>
<button type="button" class="btn btn-success btn-add" id="add_more"> <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
</button>
</div>
</div>
</div>
&#13;
答案 1 :(得分:0)
hide()方法工作得很好,你在那里的逻辑是错误的。
$(document).ready(function() {
var formCount = 0;
$('#add_more').on('click', function(e) {
formCount++;
if (formCount < 4) {
var html = getHTMLString(formCount);
var element = $(html);
$('#dynamic_form .form-group').append(html);
$(document).on('change','#primitive-selector'+formCount-1, function(){
console.log('change...' + $(this).val() + ' ' + '#A-position'+ formCount);
if($(this).val() === "sphere"){
$('#A-position'+ formCount).hide();
$('#B-position'+ formCount).hide();
$('#C-position'+ formCount).hide();
} else {
$('#diameter'+ formCount).hide();
$('#sphere-position'+ formCount).hide();
}
});
} else {
return;
}
});
看看以下小提琴。它与你提供的代码和修正工作(种类)。 https://jsfiddle.net/hdp513yq/