页面刷新点击ajax
我有一个小的评论系统,我已经修改并尝试实施到网站中。它在'阿贾克斯'。当带有HTML的jQuery嵌入到页面中时,评论系统可以正常工作 - 即当用户点击提交按钮时,代码返回“false”,停止页面刷新并提交数据。但是当我在我的网站中实现代码并将其放置在单独的.js文件中时,代码出于某种原因无法正常工作。我的意思是 - onclick刷新后的页面。为什么 ?代码根本没有改变 - 当它自己的时候,它的工作原理,但不是在index.php网站实施时。我尝试将输入类型更改为“按钮”,并从onclick调用函数 - 页面不刷新,但也没有插入输入。我没有意识到为什么会这样。下面的代码:页面刷新点击ajax
$(document).ready(function() {
$(".submit").click(function() {
var name = $("#name").val();
var email = $("#email").val();
var comment_area = $("#comment_area").val();
var dataString = 'name=' + name + '&email=' + email + '&comment_area=' + comment_area;
var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/;
var emailaddressVal = $("#email").val();
if (name == '' || !emailReg.test(emailaddressVal) || comment == '') {
alert('Please enter valid data and type in message'); return false;
}
else {
$.ajax({
type: "POST",
url: "comments.php",
data: dataString,
cache: false,
success: function (html) {
$("#com_list").append(html);
$("#com_list").fadeIn("slow");
$("#flash").fadeOut('fast');
}
});
} return false;
});
});
//END
//COM LIST
//HTML/PHP
<div class="slider">
<form id="comment_form" name="comment_form" method="post" action="#"
enctype="multipart/form-data">
<input type="text" id="name" name="name" maxlength="16"/> Name<br /><br/>
<input type="text" id="email" name="email"/> Email (will not show)<br /><br/>
<textarea id="comment_area" name="comment_area" maxlength="1000"></textarea><br /><br/>
<input type="submit" class="submit" name="submit_comment" value="submit"/> &
nbsp;comment or <a href="index.php" id="cancel"
onmousedown="$('.slider').hide();$('#com_list').show();"><u>cancel</u></a>
</form>
</div>
//comments.php
if($_POST) {
$name=$_POST['name'];
$email=$_POST['email'];
$comment_area=$_POST['comment_area'];
//$lowercase = strtolower($email);
//$image = md5($lowercase);
$insert = mysqli_query($connect,"INSERT INTO comments (name,email,comment,com_date)
VALUES ('$name','$email','$comment_area',curdate())");
}
////////////////
感谢您的任何建议..
aha!
有一个在您的js错误:
在我的控制台我得到 “的评论没有定义”
if(name=='' || !emailReg.test(emailaddressVal) || comment=='')
和更早您有:
var comment_area = $("#comment_area").val(); //<--
改变这发表评论,至少它会过去。
编辑:一点背景。当firefox遇到错误时,有时会吞下它,并且在错误发生后停止运行任何javascript,因此返回false和/或阻止默认代码不会触发,所以它仍然会发布表单并刷新页面。
给我一秒,请.. – 2011-06-15 19:22:51
@Patricia - 你太棒了......!简直不敢相信我跳过了这样一个小而明显的错误。诚然,在comments.php中也修正了“评论”问题。非常感谢你们,特别是你们帕特丽夏。 – 2011-06-15 19:33:05
我的荣幸:)觉得感觉上涨并将此标记为答案:)所以这个问题不会出现在没有答案的列表中! 很高兴我可以帮到 – Patricia 2011-06-15 19:35:55
保持你那该死的代码干净,所以你能理解你做饭...... 这会为你工作:
$(document).ready(function(){
$("#comment_form").submit(function(e){
e.preventDefault(); // stop refresh
var name = $("#name").val();
var email = $("#email").val();
var comment_area = $("#comment_area").val();
var dataString = 'name='+ name + '&email=' + email + '&comment_area=' + comment_area+'&submit_comment=true';
var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/;
var emailaddressVal = $("#email").val();
if(name=='' || !emailReg.test(emailaddressVal) || comment==''){
alert('Please enter valid data and type in message');
} else{
$.ajax({
type: "POST",
url: "comments.php",
data: dataString,
cache: false,
success: function(html){
$("#com_list").append(html);
$("#com_list").fadeIn("slow");
$("#flash").fadeOut('fast');
}
});
}
});
$('#cancel').click(function(e){
e.preventDefault();
$('.slider').hide();
$('#com_list').show();
});
});
下面是一些更干净的代码...
<div class="slider">
<form id="comment_form" name="comment_form" method="post" action="#" enctype="multipart/form-data">
<input type="text" id="name" name="name" maxlength="16"/> Name<br /><br/>
<input type="text" id="email" name="email"/> Email (will not show)<br /><br/>
<textarea id="comment_area" name="comment_area" maxlength="1000"></textarea><br /><br/>
<input type="submit" class="submit" name="submit_comment" value="submit"/> comment or <a href="index.php" id="cancel"><u>cancel</u></a>
</form>
</div>
下面是一些其他清洁和SECURE代码
<?php
if(isset($_POST['submit_comment'])){
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$comment_area = mysql_real_escape_string($_POST['comment_area']);
//$lowercase = strtolower($email);
//$image = md5($lowercase);
$query = 'INSERT INTO comments (name,email,comment,com_date) '.
"VALUES ('$name','$email','$comment_area',CURDATE())";
$insert = mysqli_query($connect, $query);
}
?>
哇...给我一秒检查出来.. – 2011-06-15 14:43:31
呃?不会不会他的表单没有.comment_form这个类,它的id和name是comment_form。 – Patricia 2011-06-15 14:44:28
猜猜看 - 它不工作...它仍然刷新,并且不会返回错误输入的弹出窗口..(但那是很容易修复)所以?有趣的是不是吗? – 2011-06-15 14:49:12
改变这一行:
$(".submit").click(function() {
要这样:
$("#comment_form").submit(function() {
的submit
事件被触发的<form>
元素上,而不是在提交按钮。
我猜这是一个错字,你的意思是$(“form#comment_form”)。submit(function(){' – jeroen 2011-06-15 14:45:53
$(“form#comment_form”)。不需要ID的形式,实际上是一个较慢的选择器,然后#comment_form。id选择器是最快的! 另外:表单点击不是他想要附加的行为,这将有一些非常奇怪的结果 – Patricia 2011-06-15 14:46:22
我编辑答案,纳入以上评论的建议 @jeroen谢谢,这是一个错字,我太急了,我猜。 @patricia谢谢你的提示,你是对的,ID选择器更快。 – justis 2011-06-15 17:03:58
你确定你正在包含该文件吗? – Patricia 2011-06-15 14:33:25
嗨。是的 - 我绝对乐观。 .js文件包含在带有脚本标签的index.php中。我在索引中也只有一种形式。PHP的 - 和代码的作品,但问题是关于输入类型='提交' - 点击它刷新页面,而不是返回false。 – 2011-06-15 14:36:16
我也尝试在index.php头标签内实现jQuery代码。同样的事情 - 刷新页面.. – 2011-06-15 14:38:13