【发布时间】:2016-06-03 02:35:45
【问题描述】:
我将 Select2 用于一个项目。第二个选择框的填充取决于第一个框中的所选项目,如下面的链接所示。但是,由于某种原因,我无法单击第二个选择框中的第一项。如果我愿意,我选择第一个项目的唯一方法是首先选择不同的用户,然后返回第一个用户。我该如何解决这个问题?
视频:
我的代码:
这是第一个选择框,由常规 PHP (Laravel) 填充。这里一切正常。
<div class="form-group">
<label for="select"> Partner: </label>
<select id="select" name="select" class="searchselect searchselectstyle">
@foreach($partners as $i => $partner)
<option {{$i == 0 ? 'selected' : ''}} value="{{$partner->id}}">{{$partner->name}}</option>
@endforeach
</select>
</div>
这里是第二个选择框,有错误。
<div class="form-group" >
<label for="select2"> Hoofdgebruiker: </label>
<select id="select2" style="min-width: 200px;" name="select2" class="searchselect searchselectstyle">
</select>
</div>
<script type="text/javascript">
$(document).ready(function(){
var url = '/json/getusers';
var $post = {};
$post.id = $("select").val();
$.ajax({
type: "POST",
dataType: "json",
url: url,
data: $post,
cache: false
}).done(function(data){
$('#select2')
.find('option')
.remove()
.end();
$.each(data, function(i, value) {
console.log(data);
$('#select2').append($('<option>').text(value.text).attr('value', value.id));
});
}
);
});
-
public function getusers(){
if(!isset($_POST['term'])){
$users = User::where('partner_id', $_POST['id'])->get();
}else{
$wildcard = '%'.$_POST['term'].'%';
$users = User::where('partner_id', $_POST['id'])->where('email', 'LIKE', $wildcard)->get();
}
$array = array();
foreach($users as $i => $user){
$array[$i] = array("id" => $user->id, "text" => $user->email);
}
return response()->json($array);
}
【问题讨论】:
-
您是否尝试过在
$.each函数之前附加一个空白选项(<option></option>)? -
@ArmanOzak 这给了我一个小的空选项,比如这里:gyazo.com/17a79875dd28a43cac148f576c5eb659
-
好的。您还可以在您的
<select>标签上添加data-placeholder="Anything you like here"吗?顺便说一句,当你这样做时,你也应该在你的 PHP 中添加一个空白选项。 -
@ArmanOzak 同样的问题:bit.ly/20Oi3Wq
-
最后一个想法:您能否尝试在创建新选项之前放置
$('#select2').select2('destroy');,在创建它们之后放置$('#select2').select2();?如果这也不起作用,我保证,我没有想法。 (:
标签: javascript php jquery ajax jquery-select2