【发布时间】:2018-09-30 08:43:39
【问题描述】:
我有一个使用引导程序和 jQuery 的多步骤表单。多步骤表单是供用户购买产品的。有 4 个步骤: - 步骤 1 是用户输入他的信息(姓名、电子邮件等) - 步骤 2 用户选择付款方式 - 步骤 3 用户介绍付款数据 - 步骤 4 为用户出示发票。
当用户点击“转到第 2 步”时,网址更改为“store.test/product/5/a-5/payment/paymentMethods”,用户仍然在同一个支付页面,但如何从第 2 步更改多步表格中的1到2步?
step1 html是这样的:
<div class="tab-pane fade show active clearfix" id="step1" role="tabpanel" aria-labelledby="home-tab">
<h6>User Info</h6>
<form method="post" action="{{route('products.storeUserInfo', ['id' => $id, 'slug' => $slug])}}">
{{csrf_field()}}
<div class="form-group font-size-sm">
<label for="name" class="text-gray">Name</label>
<input type="text" required class="form-control" value="{{ (\Auth::check()) ? Auth::user()->name : old('name')}}">
</div>
<!-- other form fields -->
<input type="submit" href="#step2"
class="btn btn-primary btn float-right next-step" value="Go to step 2"/>
</form>
</div>
在 paymentcontroller 我有 storeUserInfo 来收集 step1 中引入的用户数据并重定向到同一页面(我的疑问是如何重定向到同一页面但显示 step2 div):
public function storeUserInfo(Request $request, $id, $slug = null){
//dd($request);
$request->validate([
'name' => 'required|max:255|string',
'surname' => 'required|max:255|string',
'email' => 'required|max:255|string',
]);
Session::put('name' , $request->name);
Session::put('surname' , $request->surname);
Session::put('email' , $request->email);
return redirect(route('products.presentPaymentMethods',['id' => $id, 'slug' => $slug]));
}
public function presentPaymentMethods(Request $request, $id, $slug=null){
$productQuantities = Session::get('productQuantities');
return view('products.registration',
['productQuantities' => $productQuantities, 'id' => $id, 'slug' => $slug]);
}
路线:
Route::post('/product/{id}/{slug?}/payment/storeUserInfo', [
'uses' => 'PaymentController@storeUserInfo',
'as' =>'products.storeUserInfo'
]);
Route::get('/product/{id}/{slug?}/payment/paymentMethods', [
'uses' => 'PaymentController@presentPaymentMethods',
'as' => 'products.presentPaymentMethods'
]);
jQuery 在步骤之间导航:
<script type="text/javascript">
$(function(){
$('a.nav-link').on('show.bs.tab', function(e) {
var $target = $(e.target);
if (!divValid($('.nav-pills li a.active').prop('hash'))) {
e.preventDefault();
} else
if ($target.parent().hasClass('disabled')) {
e.preventDefault();
}
});
$(".next-step").click(function(e) {
var $active = $('.nav-pills li a.active');
nextTab($active);
});
$(".prev-step").click(function(e) {
var $active = $('.nav-pills li a.active');
prevTab($active);
});
function nextTab(elem) {
elem.parent().next().removeClass('disabled').find('a.nav-link').click();
}
function prevTab(elem) {
elem.parent().prev().find('a.nav-link').click();
}
});
【问题讨论】:
-
为什么不将数据存储在 php session 中,然后在最后一步付款完成后清除它?
-
谢谢,我在 storeUserInfo() 方法的会话中存储数据。问题是,然后在该方法中,用户被重定向到此 URL“store.test/product/5/a-5/payment/paymentMethods”的相同支付页面。但是在这个页面中仍然默认显示第 1 步,但它应该显示第 2 步,因为用户之前单击了“转到第 2 步”按钮。
-
尝试为步骤添加另一个会话名称/值,提交第一步时将会话设置为
2,然后在页面中检查会话是否为2隐藏第一步并显示步骤@987654327 @