【问题标题】:JQuery addition of selection not workingJQuery添加选择不起作用
【发布时间】:2018-07-25 06:59:21
【问题描述】:

我有这段代码,我在按下添加按钮时添加了一个选择选项。问题是我在选择下拉列表之外获取选项值。一切似乎都很好,但输出很奇怪。大家可以看看吗?

这是要放置内容的div

<div id="here"></div>

这是添加按钮

<div class="form-group col-auto">
  <button type="button" class="btn btn-success" id="trigger" style="float: left">Add an item</button>
</div>

这是js代码

<script type="text/javascript">
var val = $('#numoforders').val();
$('#trigger').click(function(){
val++;
$("#here").append('<div class="row">');
$("#here").append('<div class="form-group">');
$("#here").append('Select category');
$("#here").append('<select class="form-control" id="category_id['+val+']" name="category_id['+val+']">');
$("#here").append('<option selected>--Select a category--</option>');
@foreach($categories as $category) 
$("#here").append('<option value="{{$category->id}}">{{$category->name}}</option>');
@endforeach
$("#here").append('</select>');
$("#here").append('</div>');
$("#here").append('</div>');        
});
</script>

categories 是从控制器传过来的变量,我用的是 laravel。

如图所示,输出很奇怪。 任何帮助将不胜感激。

【问题讨论】:

  • 您正在附加不完整的 html,而浏览器正试图弥补这一点
  • 您将所有内容附加到 id 为 here 的元素,而这恰好是 &lt;div&gt;。所以输出是应该的。如果将选项元素附加到 div 还会是什么?
  • @PatrickEvans 是对的。例如,当您附加 &lt;div&gt; 标签时,JQuery 会添加一个 div 标签,但也会立即关闭它。
  • 另外,我建议应该重复使用选择器而不是多次调用。
  • 谢谢大家。是的,我错过了一些关于 .append 作用的信息。非常感谢。

标签: javascript jquery html laravel


【解决方案1】:

当每个开始元素标签被添加到 DOM 时,浏览器试图关闭它,因此,select 标签在添加 options 标签之前被关闭。尝试在一个 append 中将整个标记添加到 DOM。

<script type="text/javascript">
var val = $('#numoforders').val();
$('#trigger').click(function(){
val++;
html = '<div class="row">'
  + '<div class="form-group">'
  + 'Select category'
  + '<select class="form-control" id="category_id['+val+']" name="category_id['+val+']">'
  + '<option selected>--Select a category--</option>'
  + '<option value="{{$category->id}}">{{$category->name}}</option>';

@foreach($categories as $category) 
html += '<option value="{{$category->id}}">{{$category->name}}</option>';
@endforeach

html += '</select></div></div>';

$("#here").append(html);

});
</script>

【讨论】:

  • 非常感谢您。我不知道 jQuery 在每次追加时都会关闭开始标签。非常感谢。
  • 不是 jQuery,而是浏览器。当您附加一个开始标签时,浏览器会尝试完成它并为您关闭它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多