2011-06-15 217 views
0

我有一个小的评论系统,我已经修改并尝试实施到网站中。它在'阿贾克斯'。当带有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"/>&nbsp;Name<br /><br/> 
<input type="text" id="email" name="email"/>&nbsp;Email&nbsp;(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;& 
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())"); 

} 

////////////////

感谢您的任何建议..

+0

你确定你正在包含该文件吗? – Patricia 2011-06-15 14:33:25

+0

嗨。是的 - 我绝对乐观。 .js文件包含在带有脚本标签的index.php中。我在索引中也只有一种形式。PHP的 - 和代码的作品,但问题是关于输入类型='提交' - 点击它刷新页面,而不是返回false。 – 2011-06-15 14:36:16

+0

我也尝试在index.php头标签内实现jQuery代码。同样的事情 - 刷新页面.. – 2011-06-15 14:38:13

回答

3

aha!

有一个在您的js错误:

在我的控制台我得到 “的评论没有定义”

if(name=='' || !emailReg.test(emailaddressVal) || comment=='') 

和更早您有:

var comment_area = $("#comment_area").val(); //<-- 

改变这发表评论,至少它会过去。

编辑:一点背景。当firefox遇到错误时,有时会吞下它,并且在错误发生后停止运行任何javascript,因此返回false和/或阻止默认代码不会触发,所以它仍然会发布表单并刷新页面。

+0

给我一秒,请.. – 2011-06-15 19:22:51

+0

@Patricia - 你太棒了......!简直不敢相信我跳过了这样一个小而明显的错误。诚然,在comments.php中也修正了“评论”问题。非常感谢你们,特别是你们帕特丽夏。 – 2011-06-15 19:33:05

+0

我的荣幸:)觉得感觉上涨并将此标记为答案:)所以这个问题不会出现在没有答案的列表中! 很高兴我可以帮到 – Patricia 2011-06-15 19:35:55

1

保持你那该死的代码干净,所以你能理解你做饭...... 这会为你工作:

$(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"/>&nbsp;Name<br /><br/> 
     <input type="text" id="email" name="email"/>&nbsp;Email&nbsp;(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;&nbsp;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); 
} 
?> 
+0

哇...给我一秒检查出来.. – 2011-06-15 14:43:31

+0

呃?不会不会他的表单没有.comment_form这个类,它的id和name是comment_form。 – Patricia 2011-06-15 14:44:28

+0

猜猜看 - 它不工作...它仍然刷新,并且不会返回错误输入的弹出窗口..(但那是很容易修复)所以?有趣的是不是吗? – 2011-06-15 14:49:12

2

改变这一行:

$(".submit").click(function() { 

要这样:

$("#comment_form").submit(function() { 

submit事件被触发的<form>元素上,而不是在提交按钮。

+0

我猜这是一个错字,你的意思是$(“form#comment_form”)。submit(function(){' – jeroen 2011-06-15 14:45:53

+2

$(“form#comment_form”)。不需要ID的形式,实际上是一个较慢的选择器,然后#comment_form。id选择器是最快的! 另外:表单点击不是他想要附加的行为,这将有一些非常奇怪的结果 – Patricia 2011-06-15 14:46:22

+0

我编辑答案,纳入以上评论的建议 @jeroen谢谢,这是一个错字,我太急了,我猜。 @patricia谢谢你的提示,你是对的,ID选择器更快。 – justis 2011-06-15 17:03:58