使用模态 window 编辑数据库记录
Edit db record with modal window
我正在尝试根据保存到按钮值中的 ID 编辑一些数据库记录。
@foreach ($employment as $empl)
<button data-toggle="modal" data-target="#edit-empl" href="#edit-empl" class="btn btn-default editbtn-modal" value="{{ $empl->id }}" type="button" name="editbtn">Edit</button>
<h3 class="profile-subtitle">{{ $empl->company }}</h3>
<p class="profile-text subtitle-desc">{{ $empl->parseDate($empl->from) }} - {{ $empl->parseDate($empl->to) }}</p>
@endforeach
正如您在此处看到的,我有一个附加了 ID 的编辑按钮。
当我单击编辑时,我打开一个模式 window 来编辑字段,然后提交表单。
问题是,我不确定如何从按钮中获取该 id 到模态 window 中,以便我可以比较值并显示正确的字段..
<form class="app-form" action="/profile/employment/edit/{id}" method="POST">
{{ csrf_field() }}
<input class="editID" type="hidden" name="editID" value="">
@foreach ($employment as $empl)
@if ($empl->id == buttonidhere)
<div class="form-group">
<label for="company">Company:</label>
<input type="text" name="company" value="{{ $empl->company }}">
</div>
<div class="form-group">
<label for="month">From:</label>
<input type="date" name="from" value="{{ $empl->from }}">
</div>
<div class="form-group">
<label for="to">To:</label>
<input type="date" name="to" value="{{ $empl->to }}">
</div>
@endif
@endforeach
<div class="row">
<div class="col-sm-6">
<input type="submit" class="btn btn-primary profile-form-btn" value="Save Changes">
</div>
</div>
</form>
我能够使用 javascript 将按钮值传递到模式中。我将其放入隐藏输入中,但这对我没有任何帮助,因为我无法在为了比较值..
一个解决方案是发送您想要的详细信息,就像将 id 发送到模态框一样。
将变量发送到模态的正确方法是将其包含在打开模态的按钮中:
data-variablename="{{$your-variable}}"
使用此 jQuery 将变量的值设置为模态。其中 edit-empl
是您的模式 ID 和按钮的数据目标
$('#edit-empl').on('show.bs.modal',function (e) {
var variablename= $(e.relatedTarget).data('variablename');
$(e.currentTarget).find('input[id="yourinputID"]').val(variablename);
解决方案 1:使用 ajax
第 1 步:在 laravel 中创建一条路线,它将 return 一个 JSON object 包含所请求员工的雇用数据。
例如,
/profile/employment/data/{empl_id}
将为您获取id为empl_id
的就业数据。
第 2 步:更改您的表格如下
<form class="app-form" action="/profile/employment/edit/{id}" method="POST">
<input class="editID" type="hidden" name="editID" value="">
<div class="form-group">
<label for="company">Company:</label>
<input type="text" name="company" value="">
</div>
<div class="form-group">
<label for="month">From:</label>
<input type="date" name="from" value="">
</div>
<div class="form-group">
<label for="to">To:</label>
<input type="date" name="to" value="">
</div>
<div class="row">
<div class="col-sm-6">
<input type="submit" class="btn btn-primary profile-form-btn" value="Save Changes">
</div>
</div>
</form>
第三步:使用javascript(jQuery)使用ajax获取数据,并以模态加载到表单中。
jQuery代码:
$(document).on("click", ".editbtn-modal", function() {
var id = $(this).val();
url = "/profile/employment/data/"+id;
$.ajax({
url: url,
method: "get"
}).done(function(response) {
//Setting input values
$("input[name='editID']").val(id);
$("input[name='company']").val(response.company);
$("input[name='to']").val(response.to);
$("input[name='from']").val(response.from);
//Setting submit url
$("modal-form").attr("action","/profile/employment/edit/"+id)
});
});
解决方案 2:使用远程模式
第1步:
为例如创建另一个 blade 文件。 editEmployee.blade.php
并在其中添加上面的表格。
<form class="app-form" id="modal-form" action="/profile/employment/edit/{{ $empl->id }}" method="POST">
{{ csrf_field() }}
<input class="editID" type="hidden" name="editID" value="{{ $empl->id }}">
<div class="form-group">
<label for="company">Company:</label>
<input type="text" name="company" value="{{ $empl->company }}">
</div>
<div class="form-group">
<label for="month">From:</label>
<input type="date" name="from" value="{{ $empl->from }}">
</div>
<div class="form-group">
<label for="to">To:</label>
<input type="date" name="to" value="{{ $empl->to }}">
</div>
<div class="row">
<div class="col-sm-6">
<input type="submit" class="btn btn-primary profile-form-btn" value="Save Changes">
</div>
</div>
</form>
第 2 步:创建一个控制器,它将 return 上面的形式 HTML。
提示:使用 render() 函数。 example
第 3 步:在使用 javascript(jQuery) 显示之前将表单加载到模态 window
考虑到您的模态 ID 是 "emp-modal"
$(document).on("click", ".editbtn-modal", function() {
var id = $(this).val();
url = "/profile/employment/data/"+id;
$('#emp-modal').modal('show').find('.modal-body').load(url);
});
我正在尝试根据保存到按钮值中的 ID 编辑一些数据库记录。
@foreach ($employment as $empl)
<button data-toggle="modal" data-target="#edit-empl" href="#edit-empl" class="btn btn-default editbtn-modal" value="{{ $empl->id }}" type="button" name="editbtn">Edit</button>
<h3 class="profile-subtitle">{{ $empl->company }}</h3>
<p class="profile-text subtitle-desc">{{ $empl->parseDate($empl->from) }} - {{ $empl->parseDate($empl->to) }}</p>
@endforeach
正如您在此处看到的,我有一个附加了 ID 的编辑按钮。 当我单击编辑时,我打开一个模式 window 来编辑字段,然后提交表单。 问题是,我不确定如何从按钮中获取该 id 到模态 window 中,以便我可以比较值并显示正确的字段..
<form class="app-form" action="/profile/employment/edit/{id}" method="POST">
{{ csrf_field() }}
<input class="editID" type="hidden" name="editID" value="">
@foreach ($employment as $empl)
@if ($empl->id == buttonidhere)
<div class="form-group">
<label for="company">Company:</label>
<input type="text" name="company" value="{{ $empl->company }}">
</div>
<div class="form-group">
<label for="month">From:</label>
<input type="date" name="from" value="{{ $empl->from }}">
</div>
<div class="form-group">
<label for="to">To:</label>
<input type="date" name="to" value="{{ $empl->to }}">
</div>
@endif
@endforeach
<div class="row">
<div class="col-sm-6">
<input type="submit" class="btn btn-primary profile-form-btn" value="Save Changes">
</div>
</div>
</form>
我能够使用 javascript 将按钮值传递到模式中。我将其放入隐藏输入中,但这对我没有任何帮助,因为我无法在为了比较值..
一个解决方案是发送您想要的详细信息,就像将 id 发送到模态框一样。
将变量发送到模态的正确方法是将其包含在打开模态的按钮中:
data-variablename="{{$your-variable}}"
使用此 jQuery 将变量的值设置为模态。其中 edit-empl
是您的模式 ID 和按钮的数据目标
$('#edit-empl').on('show.bs.modal',function (e) {
var variablename= $(e.relatedTarget).data('variablename');
$(e.currentTarget).find('input[id="yourinputID"]').val(variablename);
解决方案 1:使用 ajax
第 1 步:在 laravel 中创建一条路线,它将 return 一个 JSON object 包含所请求员工的雇用数据。
例如,
/profile/employment/data/{empl_id}
将为您获取id为empl_id
的就业数据。
第 2 步:更改您的表格如下
<form class="app-form" action="/profile/employment/edit/{id}" method="POST">
<input class="editID" type="hidden" name="editID" value="">
<div class="form-group">
<label for="company">Company:</label>
<input type="text" name="company" value="">
</div>
<div class="form-group">
<label for="month">From:</label>
<input type="date" name="from" value="">
</div>
<div class="form-group">
<label for="to">To:</label>
<input type="date" name="to" value="">
</div>
<div class="row">
<div class="col-sm-6">
<input type="submit" class="btn btn-primary profile-form-btn" value="Save Changes">
</div>
</div>
</form>
第三步:使用javascript(jQuery)使用ajax获取数据,并以模态加载到表单中。
jQuery代码:
$(document).on("click", ".editbtn-modal", function() {
var id = $(this).val();
url = "/profile/employment/data/"+id;
$.ajax({
url: url,
method: "get"
}).done(function(response) {
//Setting input values
$("input[name='editID']").val(id);
$("input[name='company']").val(response.company);
$("input[name='to']").val(response.to);
$("input[name='from']").val(response.from);
//Setting submit url
$("modal-form").attr("action","/profile/employment/edit/"+id)
});
});
解决方案 2:使用远程模式
第1步:
为例如创建另一个 blade 文件。 editEmployee.blade.php
并在其中添加上面的表格。
<form class="app-form" id="modal-form" action="/profile/employment/edit/{{ $empl->id }}" method="POST">
{{ csrf_field() }}
<input class="editID" type="hidden" name="editID" value="{{ $empl->id }}">
<div class="form-group">
<label for="company">Company:</label>
<input type="text" name="company" value="{{ $empl->company }}">
</div>
<div class="form-group">
<label for="month">From:</label>
<input type="date" name="from" value="{{ $empl->from }}">
</div>
<div class="form-group">
<label for="to">To:</label>
<input type="date" name="to" value="{{ $empl->to }}">
</div>
<div class="row">
<div class="col-sm-6">
<input type="submit" class="btn btn-primary profile-form-btn" value="Save Changes">
</div>
</div>
</form>
第 2 步:创建一个控制器,它将 return 上面的形式 HTML。
提示:使用 render() 函数。 example
第 3 步:在使用 javascript(jQuery) 显示之前将表单加载到模态 window 考虑到您的模态 ID 是 "emp-modal"
$(document).on("click", ".editbtn-modal", function() {
var id = $(this).val();
url = "/profile/employment/data/"+id;
$('#emp-modal').modal('show').find('.modal-body').load(url);
});