Bootstrap 模态 event.relatedTarget 在下拉菜单中不起作用
Bootstrap modal event.relatedTarget doesn't work inside dropdown
我有一个 foreach 循环,它遍历规则列表,每个规则都有一个 bootstrap 下拉菜单来编辑规则。下拉菜单 link 应该会打开一个模式,它会打开。
问题是 event.relatedTarget 始终具有第一个下拉项的数据,而不是已单击的实际下拉项的数据。如果我删除下拉菜单并只使用正常的 links 一切正常。
我做错了什么?
带有下拉菜单的循环:
@foreach( $rules as $rule )
<a href="#" OnClick="event.preventDefault();" role="button" id="dropdownMenuLink{{ $rule->id }}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-offset="-1,8">{{ $rule->name }} <i class="fas fa-caret-down"></i></a><br />
<ul class="dropdown-menu" aria-labelledby="dropdownMenuLink{{ $rule->id }}">
<li><a class="dropdown-item" href="#" OnClick="event.preventDefault();" data-toggle="modal" data-target="#editRule" data-id="{{ $rule->id }}" data-name="{{ $rule->name }}">Edit rule</a></li>
</ul>
@endforeach
模态:
<div class="modal fade" id="editRule" tabindex="-1" role="dialog" aria-labelledby="editRuleCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content text-white bg-dark">
<form method="POST" action="#">
@csrf
<div class="modal-header">
<h5 class="modal-title" id="editRuleCenterTitle">Edit Rule</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div class="form-group row">
<div class="col-md-12">
<label for="ruleName" class="form-label">Rule name</label>
<input id="ruleName" type="text" class="form-control" name="ruleName" required>
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Update Rule</button>
</div>
</form>
</div>
</div>
</div>
脚本:
@section( 'scripts' )
<script>
$( '#editRule' ).on( 'show.bs.modal', function ( event ) {
console.log( event.relatedTarget );
var button = $( event.relatedTarget );
var id = button.data( 'id' );
var name = button.data( 'name' );
var modal = $( this );
modal.find( '.modal-title' ).text( 'Edit rule: ' + name );
modal.find( '.modal-body input' ).val( name );
});
</script>
@endsection
``
用 class 下拉列表将您的 foreach 循环包裹在 div 中:
@foreach( $rules as $rule )
<div class="dropdown">
<a href="#" OnClick="event.preventDefault();" role="button" id="dropdownMenuLink{{ $rule->id }}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-offset="-1,8">{{ $rule->name }} <i class="fas fa-caret-down"></i></a><br />
<ul class="dropdown-menu" aria-labelledby="dropdownMenuLink{{ $rule->id }}">
<li><a class="dropdown-item" href="#" OnClick="event.preventDefault();" data-toggle="modal" data-target="#editRule" data-id="{{ $rule->id }}" data-name="{{ $rule->name }}">Edit rule</a></li>
</ul>
</div>
@endforeach
我有一个 foreach 循环,它遍历规则列表,每个规则都有一个 bootstrap 下拉菜单来编辑规则。下拉菜单 link 应该会打开一个模式,它会打开。
问题是 event.relatedTarget 始终具有第一个下拉项的数据,而不是已单击的实际下拉项的数据。如果我删除下拉菜单并只使用正常的 links 一切正常。
我做错了什么?
带有下拉菜单的循环:
@foreach( $rules as $rule )
<a href="#" OnClick="event.preventDefault();" role="button" id="dropdownMenuLink{{ $rule->id }}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-offset="-1,8">{{ $rule->name }} <i class="fas fa-caret-down"></i></a><br />
<ul class="dropdown-menu" aria-labelledby="dropdownMenuLink{{ $rule->id }}">
<li><a class="dropdown-item" href="#" OnClick="event.preventDefault();" data-toggle="modal" data-target="#editRule" data-id="{{ $rule->id }}" data-name="{{ $rule->name }}">Edit rule</a></li>
</ul>
@endforeach
模态:
<div class="modal fade" id="editRule" tabindex="-1" role="dialog" aria-labelledby="editRuleCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content text-white bg-dark">
<form method="POST" action="#">
@csrf
<div class="modal-header">
<h5 class="modal-title" id="editRuleCenterTitle">Edit Rule</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div class="form-group row">
<div class="col-md-12">
<label for="ruleName" class="form-label">Rule name</label>
<input id="ruleName" type="text" class="form-control" name="ruleName" required>
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Update Rule</button>
</div>
</form>
</div>
</div>
</div>
脚本:
@section( 'scripts' )
<script>
$( '#editRule' ).on( 'show.bs.modal', function ( event ) {
console.log( event.relatedTarget );
var button = $( event.relatedTarget );
var id = button.data( 'id' );
var name = button.data( 'name' );
var modal = $( this );
modal.find( '.modal-title' ).text( 'Edit rule: ' + name );
modal.find( '.modal-body input' ).val( name );
});
</script>
@endsection
``
用 class 下拉列表将您的 foreach 循环包裹在 div 中:
@foreach( $rules as $rule )
<div class="dropdown">
<a href="#" OnClick="event.preventDefault();" role="button" id="dropdownMenuLink{{ $rule->id }}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-offset="-1,8">{{ $rule->name }} <i class="fas fa-caret-down"></i></a><br />
<ul class="dropdown-menu" aria-labelledby="dropdownMenuLink{{ $rule->id }}">
<li><a class="dropdown-item" href="#" OnClick="event.preventDefault();" data-toggle="modal" data-target="#editRule" data-id="{{ $rule->id }}" data-name="{{ $rule->name }}">Edit rule</a></li>
</ul>
</div>
@endforeach