0

我正在从我的数据库中呼出一个内容列表,并且每个项目旁边都有一个星形图标。我试图做到这一点,以便当用户单击星号时,它会在我的数据库中找到该内容并更改该字段中的“流行”值(“喜欢”按钮)。我一直在尝试通过将每颗星包裹在一个标签中然后将每个表单的 id 设置为 'formWithId'x ...... x 是正在显示的内容的 id 来做到这一点。

这是代码:

echo "<form  method = 'post' class ='formId".$row['id']."' id = 'likePostWithId".$row['id']."'>";
      //all inputs are hidden and send the 'id' value of the content so the php file will know which field of the table to like in the mysql database
echo "<input type ='text' name = 'email' style = 'display: none;' value= '".$row['email']."' >
      <input type ='text' name = 'id' style = 'display: none;' value= '".$row['id']."' >
      //this is the star icon
      <i class = 'ss-icon' id = '".$row['id']."'>&#x22C6; </i>";
echo "</form>"; 

所以,现在我需要的是能够通过使用 jquery validate 来发送表单......但我遇到的问题是我一直使用 jquery 验证(使用提交处理程序)来提交其 id 是预定义的特定表单并且不要根据从数据库发送的内容的 id 进行更改。

这是我正在尝试的示例

$(document).ready(function(){
    $(".ss-icon").click(function(){
       var id= $(this).attr('id');
       $("#likePostWithId"+id).submit();
    });
});

$(function(){
    $(".ss-icon").click(function(){
    //this doesn't work...
    $("#likePostWithId").validate({
         submitHandler:function(data){
            //do stuff
          }
     )};
)};

看看在哪里$("#likePostWithId")......我不知道如何让它选择具有正确 id 的那个(示例$("#likePostWithId"+id))将解释为#likePostWithId6$likePostWithId7其中的数字是 mysql 内容的 id

无论如何,我不知道你们是否清楚这...无需重新加载页面

任何帮助表示赞赏。

谢谢

4

4 回答 4

1

您可以使用 jQuery 的 Ajax 来实现这一点。只需给每个星形图标一个唯一的 id(这个 id 应该与 MySQL 数据有某种关系,比如索引键)。使用 jQuery 的 Ajax 函数将此参数(id)传递给一个 php 脚本,该脚本获取数据(对于每个 MySQL 条目是唯一的,如索引),这会改变它的流行字段条目。在成功功能上,您可以对星形图标进行一些动画或颜色更改,以告知数据已成功发布。试一试。

于 2013-02-20T06:35:14.003 回答
0

试试这个

 $(function(){
   $(".ss-icon").click(function(){
      var id= $(this).attr('id');
      $("#likePostWithId" + id ).validate({ <--- here
      submitHandler:function(data){
         $("#likePostWithId"+id).submit();
      }
   )};
 )};

但是,这会提交表单...您可以使用 ajax 提交表单而无需重新加载

于 2013-02-20T06:35:59.580 回答
0

也许你可以用它$.post()来解决你的问题。然后你不必乱用表格:

$(document).ready(function(){
    $(".ss-icon").click(function(){
       $.post('yourPHPUrl', { contentID: $(this).attr('id') }, successFunction);
    });
});

function successFunction(data) {
    if (data.success) { //just a sample, you can give a JSON-Object back to the success function
        $('#' + data.ID).css() ... // do something with the clicked star
    }
}
于 2013-02-20T06:44:38.990 回答
0

你的代码:

$(function(){
    $(".ss-icon").click(function(){
        //this doesn't work...
        $("#likePostWithId").validate({
             submitHandler:function(data){
                 //do stuff
             }
        )};
    }); // <-- this was missing
)};

您缺少一组括号,但您仍然不应该那样实现它。您只是在每次点击时重新初始化插件。(该插件已经内置了click事件处理程序,并且会自动捕获。)

.validate()必须在准备初始化插件 的 DOM 中调用一次。根据文档,回调函数是“在验证后通过 Ajax 提交表单的正确位置”。submitHandler

$(function(){

    $("#likePostWithId").validate({ // initialize plugin
         // other options & rules,
         submitHandler: function(form){
             // do ajax
             return false; // blocks form redirection since you already did ajax
         }
    )};

)};

玩一个演示:http: //jsfiddle.net/XnfDc/

于 2013-02-20T16:09:39.773 回答