我正在尝试使用Yii构建一个多页面的表单,但我对PHP和Yii很新,我想知道编写多页面表单的最佳实践是什么.到目前为止,我打算做的是添加一个名为"step"的隐藏字段,其中包含用户在表单中的当前步骤(表单分为3个步骤/页).所以考虑到这一点,这就是我打算如何处理用户点击Controller中的上一个/下一个按钮:
public function actionCreate()
{
$userModel = new User;
$data['activityModel'] = $activityModel;
$data['userModel'] = $userModel;
if (!empty($_POST['step']))
{
switch $_POST['step']:
case '1':
$this->render('create_step1', $data);
break;
case '2':
$this->render('create_step2', $data);
break;
}else
{
$this->render('create_step1', $data);
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法有意义吗?或者我离开基地,在Yii/PHP中有更好,更优化的方法吗?
谢谢!
我正在使用JQuery的手风琴模块编写表单向导.问题是我想覆盖手风琴菜单上的任何鼠标点击,以便在手风琴将显示下一部分之前首先验证表格.
我尝试过以下方法:
$('#accordion h3').unbind();
$('#accordion h3').click(function() {
if (validate())
{
$("#accordion").accordion('activate', 2);
}else
{
alert("invalid form");
}
}
Run Code Online (Sandbox Code Playgroud)
但上面的代码不起作用.无论表格是否有效,手风琴的内置点击事件仍会被调用,手风琴会显示下一部分.
我也尝试了以下代码:
$('#accordion h3').click(function(event) {
if (validate())
{
$("#accordion").accordion('activate', 2);
}else
{
alert("invalid form");
}
event.stopPropagation();
});
Run Code Online (Sandbox Code Playgroud)
但是stopPropagation()调用似乎根本不会影响手风琴的行为,无论表单是否有效,都会显示下一部分.
知道我可能做错了吗?
谢谢!
我在使用JQuery处理多个单选按钮组时遇到问题.由于某种原因,JQuery代码无法分辨出两组单选按钮之间的区别,也无法分辨出我点击了哪一组单选按钮.
这是HTML代码:
<!-- Radio button group 1 -->
<input type="radio" name="group_1" value="full_day_ticket"/>
<input type="radio" name="group_1" value="half_day_ticket"/>
<!-- Radio button group 2 -->
<label><input type="radio" name="group_2" value="boarder"/> Snowboard</label>
<label><input type="radio" name="group_2" value="skier"/> Ski</label>
Run Code Online (Sandbox Code Playgroud)
而JQuery代码如下:
$("input:radio[@name='group_2']").click(function() {
alert('group 2 clicked');
}
Run Code Online (Sandbox Code Playgroud)
现在,当我点击名为"group_1"的单选按钮时,JQuery认为我点击了"group_2"中的单选按钮并显示了警告窗口.出于某种原因,似乎JQuery没有识别@ name ='group_2'过滤器并捕获页面上所有单选按钮的点击,而不仅仅是名为'group_2'的单选按钮.
有没有人遇到过这个问题?或者我做了一些愚蠢的事情?
谢谢!