Jquery / AJAX / CakePHP模态消息,只有在出现模态错误时才会进入灯光输出框?
EDITS
这是我一直在使用的新代码,如果我在检查提交之外有新代码,那么页面甚至没有进入,它只是转到新的URL! 但然后加载模态检查,但在计划页面中完成所有这些,因为它刚刚加载了AJAX文件!
格伦。
$(document).ready(function() { $('#UserSignUpUserForm').on('submit', function(e) { if ($('div.error-message').size() == 0) { // if no error messages $('form').off('submit'); // unbind the form submission. $('form').submit(); // submit the form now to reload the page. } else { e.preventDefault(); $.post($(this).attr('action'), $(this).serialize(), function(res) { $('form').replaceWith(res); console.log(res); }) } //End of if / else check! }) });
旧post
好的,有人帮我,并给了我这个代码,以解决我的一个问题,但现在这个代码,一旦我开始更详细地检查它不起作用100%。 我正在使用CakePHP,我有一个用户注册管理员,它加载到一个灯光输出框。 当注册模式在密码中至少满足8个字母时,用户名必须是唯一的。
现在代码(我已添加到)给了我,以确保加载到灯光输出框中的模态错误的div。 问题是,当没有错误时,页面重定向加载到灯光输出框而不是主浏览器窗口。
所以我试图更改下面的代码添加一个检查,以查看这些或如果这些错误从服务器返回,然后如果这样解雇代码,如果没有(如果一切都好),那么不要做任何事情。
我对JQuery有点弱,PHP更像是我的东西。 对不起,如果我有任何newbe错误…..
$('form').on('submit', function(e) { var pattern = 'error-meesage'; //I added this var exists = pattern.test(res); //I added this if(exists) { //I added this e.preventDefault(); $.post($(this).attr('action'), $(this).serialize(), function(res) { $('form').replaceWith(res); console.log(res); }) } //I added this })
这就是它给我回来的function,当错误消息div存在时它不起作用,它将它们加载到一个没有任何布局的新窗口中,因为请求是由AJAX发出的!
Uncaught ReferenceError: $ is not defined
非常感谢
格伦。
编辑
如果你删除我标记’我添加了’的行,那么代码没有任何问题,它可以访问Jquery lib文件,但我想我可能会停止从Cake的布局加载一路!
谢谢格伦。
您有要求的编辑代码是吹::
我还会告诉你,我现在已经拆除了灯箱,但我正在做的事情或多或少是相同的。 我现在仍然使用AJAX将这些页面加载到隐藏的div中,然后使用JQuery UI副作用。 但是同样的错误发生了。 如果有错误,则cake会使用包含类或错误消息的div从模式报告错误消息。 但是,如果没有错误消息div并且它保存得很好,它会将内容加载到屏幕一侧显示的div中,就像我的灯箱一样!
然而,随着你添加的额外代码,它只是在没有用户的情况下提交页面,看到整个方面都进来。即使对我来说,这应该是一个快速修复(只是没有绕过它让我,约5件事我我正在使用这个网站),只是为了检查post提交。 即使它确实提交它加载整个页面但超出我的默认布局,例如它仍在加载它有一个ajax页面。
我希望这已经说清楚了。
这是我的默认布局文件,
Html->charset(); $Header .= 'XXXXXXXX '; $Header .= $this->Html->meta('icon'); $Header .= $this->AssetCompress->css('CssFile'); $Header .= $this->AssetCompress->script('JSFile'); $Header .= $this->fetch('meta'); $Header .= $this->fetch('css'); $Header .= $this->fetch('script'); echo $Header; ?>
<?php $MainLayout ='' . $this->Html->image('logo.gif', array('alt' => 'top banner')) . ''; $MainLayout .= $this->Session->flash('bad', array('element' => 'FlashError')); $MainLayout .= $this->Session->flash('good', array('element' => 'FlashGood')); $MainLayout .= $this->Session->flash('auth', array('element' => 'FlashError')); $MainLayout .= $this->fetch('content'); echo $MainLayout; ?> //These are the areas where file loads!
用户文件格式::
layout = 'ajax'; $AddUserForm = $this->Form->create('User', array('url' => '/PATH-TO-GO-TO')); $AddUserForm .= "Add New User
"; $AddUserForm .= $this->Form->input('username'); $AddUserForm .= $this->Form->input('password'); $AddUserForm .= $this->Form->input('email'); $AddUserForm .= $this->Form->input('role', array('options' => array('user' => 'User','admin' => 'Admin'))); $AddUserForm .= $this->Form->input('clients_id', array('options' => array($AllClients), 'empty'=>true)); $AddUserForm .= $this->Form->submit("SAVE USER", array('class' =>'Button')); $AddUserForm .= $this->Form->end(); echo $AddUserForm; ?> $(document).ready(function() { $('form').on('submit', function(e) { e.preventDefault(); $.post($(this).attr('action'), $(this).serialize(), function(res) { $('form').replaceWith(res); console.log(res); }) }) if ($('div.error-message').size() == 0) { // if no error messages $('form').off('submit'); // unbind the form submission. $('form').submit(); // submit the form now to reload the page. } });
JS文件加载侧盒::
$(".ADDUSER").click(function() { //This is for the text link on my page $('.SideBoxUser').toggle("slide", { direction: "right" }, 1000); $('.SideBoxUser').load('/PATH-TO-GO-TO'); });
我希望这就是所有的代码,如果没有,请告诉我….
非常感谢格伦。
确保在代码之前引用了jQuery。 像这样: Html->script('jquery'); ?>
Html->script('jquery'); ?>
这通常可以采用默认布局。
资料来源: http : //book.cakephp.org/2.0/en/core-libraries/helpers/js.html
$('form').on('submit', function(e) { e.preventDefault(); $.post($(this).attr('action'), $(this).serialize(), function(res) { $('form').replaceWith(res); console.log(res); }) })
在这些行之后,只需添加此代码以检查html中的错误消息,如下所示,
if ($('div.error-message').size() == 0) { // if no error messages $('form').off('submit'); // unbind the form submission. $('form').submit(); // submit the form now to reload the page. }
我按照我的理解完成了,希望这可以帮助你。