表单提交按钮,我必须使用jquery检查一些验证。然而,我也使用了form_open(xxxx)的codeigiiter验证,这使得我的提交按钮jQuery没有被调用。我该怎么做才能使这两部作品都成功?之前还是之后?(我想要前端和后端检查)
<?php $prevURLPATH=urlencode($p); echo form_open('form/'.$usr.'/'.$name.'?prevURL='.$p); ?>
<div class="form-group row">
<label class="col-md-3 control-label text-center"></label>
<div class="col-md-8">
<button id="submit-upload-form" class="btn btn-primary btn-tw" onclick="setup(); return false;"><i class="glyphicon glyphicon-upload"></i>Submit</button>
<button id="validate" hidden="true" type="submit"></button>
</div>
</div>
function setup()
{ .......Checking some fields in the form...............}
我想要的是:在表单提交上,Jquery/JS检查(前端),然后是后端代码点火器表单检查。
(当用户点击提交按钮时,它似乎忽略了所有的jquery验证,直接进入代码点火器验证。我认为如果我在php中使用form_open(),我会受到很大的限制,对吧?)
我正在关注此链接。
希望找到一个答案,让其他人知道正确的方法来进行代码初始化验证。
感谢您到目前为止的所有回答,但我仍然找不到正确的解决方案(还有人可以帮忙吗?
如果您想在提交表单之前在客户端进行验证,以下操作将起作用:
// view
echo form_open('basic_controller/submission');
echo form_input( array('name'=>'text', 'id'=>'text_input') );
echo form_submit('my_submit', 'Enter', "id='my_submit'");
echo form_close();
// controller
function submission() {
$field = $this->input->post('text');
// add your checkings (backend)
}
到目前为止,这是你已经拥有的,但更简单。请注意,表单上的字段有一个ID。我们现在可以通过jQuery轻松地操作和访问表单的内容。在提交按钮上添加点击处理程序:
// view
<script type='text/javascript'>
$(document).on('click', '#my_submit', function() {
var input_value = $('#text_input').val();
// do your frontend checkings here
alert('before form submission. ' + input_value);
});
</script>
实际上,不需要给字段分配ID,只需要为提交按钮分配一个ID,然后以其他方式访问字段(我这样做只是为了简单起见)。
编辑
在您的情况下,脚本应该是:
$(document).on('click', '#submit-upload-form', function() {
setup();
});
您可以使用jquery.validate插件。它的约定类似于验证表单的html5方法。每个现代浏览器都支持这种方法,所以如果有人关闭javascript,你甚至可以提交jquery插件,并将代码点火器验证作为最后手段。
有了jquery插件,您可以进行更多的自定义,而html5验证带来了自己的消息和样式。
我认为你的例子也有问题,没有输入,所以我们确切地验证了什么。给定上传类表明将发生文件上传。
<input type="file" name="pic" id="pic" accept="image/gif, image/jpeg" required/>
jquery插件也有上传验证的方法。
你的表格可能有问题。你关闭它吗?而且它有错误的动作。如果有文件的话,也许应该是form_open_multipart(),记住form_open产生POST方法表单。那么这个操作中的url呢:form/'$usr.'/'$name。'?prevURL='$p也许可以尝试改进控制器和路由。
对了。使用jquery-validate就像在输入中放入html5规则并在底部添加脚本一样简单。
<script>
$("#your_form").validate();
</script>
还有最后一件事。如果您使用jquery插件,请记住在加载插件之前加载jquery:)
这里有一个例子。。希望对你有用。。
<?php
$attributes = array('class' => 'email', 'id' => 'myform');
$prevURLPATH=urlencode($p); echo form_open('form/'.$usr.'/'.$name.'?prevURL='.$p,$attributes); ?>
<div class="form-group row">
<label class="col-md-3 control-label text-center"></label>
<div class="col-md-8">
<button id="submit-upload-form" class="btn btn-primary btn-tw" type="submit"><i class="glyphicon glyphicon-upload"></i>Submit</button>
</div>
</div>
<script>
$(document).ready(function(){
$('#myform').submit(function() {
alert('hi');
//write your validation code here. and make sure about jquery library is loaded.
return false;
});
}};
</script>
为此,jQuery团队成员、jQuery UI团队的首席开发人员和QUnit的维护人员Jörn Zaeffer编写并维护了一个插件。它始于2006年jQuery的早期,并从那时起进行了更新和改进。
捆绑了很多你可以玩的例子
把这样的东西放在你的头上,
<script src="<?php echo YOUT_PATH.'jquery-1.12.2.js'; ?>"></script>
<script src="<?php echo YOUR_PATH.'bootstrap.min.js'; ?>"></script>
<script src="<?php echo YOUT_PATH.'jquery-validation-1.15.0/dist/jquery.validate.js'; ?>"></script>
在你的表格中,将类似于这个
<?php echo form_open('form/'.$usr.'/'.$name.'?prevURL='.urlencode($p), array('class'=>'form-horizontal','class'=>'signupForm')); ?>
<div class="form-group">
<div class="col-sm-9 col-sm-offset-4">
<label class="col-md-3 control-label text-center"></label>
<button type="submit" class="btn btn-primary btn-tw" name="signup" ><i class="glyphicon glyphicon-upload"></i>Submit</button>
</div>
</div>
<?php form_close(); ?>
在你的页脚放类似的东西。
<script type="text/javascript">
$( "#signupForm" ).validate( {
rules: {
// Rules Here
},
messages: {
// Messages here
},
errorElement: "em",
errorPlacement: function ( error, element ) {
// Add the `help-block` class to the error element
error.addClass( "help-block" );
if ( element.prop( "type" ) === "checkbox" ) {
error.insertAfter( element.parent( "label" ) );
} else {
error.insertAfter( element );
}
},
highlight: function ( element, errorClass, validClass ) {
$( element ).parents( ".col-sm-5" ).addClass( "has-error" ).removeClass( "has-success" );
},
unhighlight: function (element, errorClass, validClass) {
$( element ).parents( ".col-sm-5" ).addClass( "has-success" ).removeClass( "has-error" );
}
});
</script>
你可以在这个链接中阅读如何正确使用它,http://jqueryvalidation.org/
我在下面的代码中也遇到了同样的问题。
<form id="formId" action="path">HTML</form>
<script>
$("#formId").submit(function(){
//validation
return false;
});
<script>
但当我交换id和action时,它很简单。
<form action="path" id="formId"></form>
您需要在编写脚本之前关闭表单,这将起作用。尝试以下代码-
<?php $prevURLPATH=urlencode($p); echo form_open('form/'.$usr.'/'.$name.'?prevURL='.$p); ?>
<div class="form-group row">
<label class="col-md-3 control-label text-center"></label>
<div class="col-md-8">
<button id="submit-upload-form" class="btn btn-primary btn-tw" onclick="setup(); return false;"><i class="glyphicon glyphicon-upload"></i>Submit</button>
<button id="validate" hidden="true" type="submit"></button>
</div>
</div>
</form>
<script>
function setup()
{ .......Checking some fields in the form...............}
</script>
您可以删除提交按钮,并在按钮上设置验证功能,就像对所做的那样
<button id="submit-upload-form" class="btn btn-primary btn-tw" onclick="setup(); return false;"><i class="glyphicon glyphicon-upload"></i>Submit</button>
你的设置功能检查如下:
function setup(){
//do your verification stuff
if (valid){
$("#yourFormId").submit();
}
}