javascript - jqWidgets:如何在 jqxWindow 中发布 HTML 表单?
问题描述
我在 Laravel 项目的 jqxWindow 小部件中创建了以下 HTML 表单:
<div id="provinceWindow">
<div id="provinceWindowHeader"></div>
<div id="provinceWindowContent">
<form id="provinceForm" method="POST" action="{{route('province.store')}}">
{{ csrf_field() }}
<input type="hidden" name="provinceId" id="provinceId" value=""/>
<div class="form-group row">
<div class="col-6"><label>English province name</label></div>
<div class="col-6"><input type="text" name="provinceNameEn" id="provinceNameEn" maxlength="20"/></div>
</div>
<div class="form-group row">
<div class="col-6"><label>Spanish province name</label></div>
<div class="col-6"><input type="text" name="provinceNameSp" id="provinceNameSp" maxlength="20"/></div>
</div>
<br/>
<div class="form-group row justify-content-center">
<input type="button" value="Submit" id="submitBtn" class="btn btn-sm col-3" />
<span class="spacer"></span>
<input type="button" value="Cancel" id="cancelBtn" class="btn btn-sm col-3" />
</div>
</form>
</div>
</div>
这是 javascript 文件:
$(document).ready(function () {
var datarow = null;
$.ajaxSetup({
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}
});
//-----------------------------
// Window settings
//-----------------------------
$('#provinceWindow').jqxWindow({
autoOpen: false,
isModal: true,
width: 400,
height: 160,
resizable: false,
title: 'Province name',
cancelButton: $('#cancelBtn'),
initContent: function () {
$('#submitBtn').jqxButton();
$('#submitBtn').on('click', function () {
$('#provinceForm').submit();
});
}
}).css('top', '35%');
文件 routes\web.php 仅为此页面定义了一个资源路由:
// Routes for province maintenance
Route::resource('province', 'provinceController');
使用命令检查可用路由php artisan route:list
,我得到这些:
Method URI Name Action
GET|HEAD / APP\Http\Controllers\homeController@index
GET|HEAD province province.index APP\Http\Controllers\provinceController@index
POST province province.store APP\Http\Controllers\provinceController@store
GET|HEAD province/create province.create APP\Http\Controllers\provinceController@create
GET|HEAD province/{province} province.show APP\Http\Controllers\provinceController@show
PUT|PATCH province/{province} province.update APP\Http\Controllers\provinceController@update
DELETE province/{province} province.destroy APP\Http\Controllers\provinceController@destroy
GET|HEAD province/{province}/edit province.edit APP\Http\Controllers\provinceController@edit
我的控制器动作:
public function store(Request $request)
{
$fields = $request->all();
if ($request->provinceId == '') {
$province = new province($fields);
$validator = Validator::make($fields, $province->rules());
if ($validator->fails()) {
return redirect('')->withErrors($validator)->withInput();
}
else {
$province->save();
}
return view('province/index');
}
}
该表单显示在 jqxGrid 小部件的顶部,作为模式窗口,以便捕获所需的信息并为相应的 DB 表执行 CRUD 操作。
问题是,当我单击“提交”按钮时,窗口关闭,没有其他任何反应。表单未发布到指定的操作,输入的数据会丢失。
我是在initContent内部还是外部初始化submitBtn都没有关系。表格从不张贴。我还尝试了jqxWindow 的Close事件,但无济于事。
如果我看一下生成的 HTML,它看起来像这样:
<form id="provinceForm" method="POST" action="http://mis:8080/province">
<input type="hidden" name="_token" value="Y9dF5PS7nUwFxHug8Ag6PHgcfR4xgxdC43KCGm07">
<input type="hidden" name="provinceId" id="provinceId" value="">
<div class="form-group row">
<div class="col-6">
<label>English province name</label>
</div>
<div class="col-6">
<input type="text" name="provinceNameEn" id="provinceNameEn" maxlength="20">
</div>
</div>
<div class="form-group row">
<div class="col-6">
<label>Spanish province name</label>
</div>
<div class="col-6">
<input type="text" name="provinceNameSp" id="provinceNameSp" maxlength="20">
</div>
</div>
<br>
<div class="form-group row justify-content-center">
<input type="button" value="Submit" id="submitBtn" class="btn btn-sm col-3 jqx-rc-all jqx-button jqx-widget jqx-fill-state-normal" role="button" aria-disabled="false">
<span class="spacer"></span>
<input type="button" value="Cancel" id="cancelBtn" class="btn btn-sm col-3">
</div>
</form>
按下提交按钮将我带到主页,数据库表中没有添加任何内容。我猜这个问题与 Laravel 路由有关,因为我没有收到任何错误。
这种方法缺少什么或有什么问题?任何光线都值得赞赏。
解决方案
好吧,因为我错误地在我的模型中为列添加了一个不需要的验证(在 DB 表级别已经定义了一个约束),所以在保存新记录时不可能完成验证器。我在我的模型中评论了那条线,就是这样!
protected $rules = array(
'provinceNameEn' => 'required|alpha|max:20',
'provinceNameSp' => 'required|alpha|max:20'
//'deleted' => 'required|in:M,F' // This is already validated in a DB constraint.
);
我注意到控件已返回到我的主页,但没有任何消息或错误,但如果您注意我的控制器,那正是编程的行为。但是,没有显示错误消息的实现,所以我dd($validator);
在该return
语句之前添加了。在那里我阅读了消息并最终找到了解决方案。
推荐阅读
- c - 在 C 问题中使用数组、指针和结构存储数据
- python - 如何在 Python 中迭代 JSON 列表
- mysql - 计算在另一列中具有特定值的唯一值?
- codenameone - 如何在顶部代号的第一个组件前面添加自定义工具栏?
- python - ModuleNotFoundError:没有名为“sklearn.inspection”的模块
- 3d - 查找未被面包围的顶点
- php - imap gmail中的DDeboer连接失败
- javascript - YouTube API 回调函数在将它们放入 DOMContentLoaded 的回调中时不可用
- javascript - 属性或方法“startConversationWith”未在实例上定义,但在渲染期间引用
- java - AWS IoT Java SDK - 消息发布后代理断开连接