【问题标题】:jquery problem?jQuery问题?
【发布时间】:2010-10-07 04:00:13
【问题描述】:

我有这个 jquery 问题我已经有好几天了,我对此很陌生,所以请原谅我在这个主题上的愚蠢。谢谢:))

html代码:

<ul class="statuses">
<li id="set_23" class="message">
  // this is meant to increase everytime you click the vote_up just like stackoverflow 
  <span class="vote_count">27</span>
  <a href="#" class="vote_up"><img src="img/uparrow.png" /></a>
  <a href="#" class="vote_down"><img src="img/downarrow.png" /></a>

 </li>

</ul>

这是我的 jquery 代码:

$(document).ready(function() {
    $('#statuses').delegate('.vote_up', 'click', function() {
       //get the id
        var the_id = $(this).closest('.message').attr('id').split('_').pop();
        //the main ajax request
        $.ajax({
            type: "POST",
            data: "action=vote_up&id=" + the_id,
            url: "ajax/votes.php",
            success: function (msg) {
                  // fade in the new vote_count
                $(this).siblings("span.vote_count").html(msg).fadeIn();
                  // get the child <img> and set its src
                $(this).children("img").attr("src", "img/uparrowActive.png");
            }
        });
    });

});

编辑:jquery fade.in 和图像 src 的更改也不起作用,我是否引用了正确的跨度或类(ajax 请求现在正在工作)

【问题讨论】:

  • ?抱歉,我更新了问题,我忘了我有 php varibale
  • 问题出在哪里?设置后 console.log(the_id) 会发生什么? POST 调用发送的数据是什么?
  • 只需将您的代码放在 jsfiddle 上,这样人们就可以一键查看它的运行情况。
  • 好的,谢谢@user257493,下次我会这样做,再次感谢
  • @getaway - 虽然你的头衔很差,但这还不错。但是您从未在帖子中真正提出过问题。请确保我们这样做,这样我们就不必猜测您在问什么。它将帮助我们帮助您。谢谢! :)

标签: javascript jquery html image fadein


【解决方案1】:

首先要跳出来:

<ul class="statuses"> 

$('#statuses')

... jQuery 中的 # 符号是 id-selector(与 CSS 相同)。由于您的&lt;ul&gt; 设置为class="statuses",因此您需要使用类选择器:

$('.statuses')

仅此一项就会破坏你所有的 jQuery

【讨论】:

  • 天啊,真不敢相信我没看到。
  • lol 谢谢,vote_count 正在工作,这太棒了,:)),但是成功功能没有执行淡入淡出和图像更改! +感谢 STW 给我的 +upvote
  • np;通常就是这样简单的事情
  • 或者如果页面上只有一个statuses(我猜是这样),最好保留#statuses,并将元素更改为&lt;ul id="statuses"&gt; 。这将是一个更快的查找。同样,这仅适用于页面上只有一个。
  • 感谢大家,现在一切正常,但是当我点击页面底部的投票按钮时,怎么会带我到页面顶部?
【解决方案2】:

来自 jQuery 文档:

beforeSend、error、dataFilter、 成功和完整的选择都需要 调用的回调函数 适当的时间。这个对象 因为他们都将成为对象 传递给 $.ajax 的上下文属性 在设置中;如果那不是 指定它将参考 Ajax 设置本身。

所以,请尝试将 context: this 添加到您的 ajax 请求选项中。

【讨论】:

    【解决方案3】:

    改变这个

    var the_id = $(this).closest('.message').attr('id').split('_').pop();
    

    到这里

    var the_id = $(this).parents('.message').attr('id').replace('set_', '');
    

    或者

    var the_id = $(this).parent().attr('id').replace('set_', '');
    

    如果您知道链接的父元素将始终为ul.message

    【讨论】:

    • 为什么要改变?如果有嵌套的.message 元素,.parents() 可能会返回多个结果,而.closest() 将保证仅具有.message 的第一个祖先。 .split('_').pop() 也没什么问题。
    • 个人偏好尽可能明确。 .closest() 引入歧义,如果标记被更改,可能会导致不良结果(而显式要求 JS 意识到元素层次结构)。
    • 另外:将函数调用保持在最低限度,尤其是在链接时,绝不是一个坏主意。
    • 好吧,个人喜好。我只是无法弄清楚您的答案与问题代码中的问题有何关系。
    猜你喜欢
    • 2011-03-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 2013-01-25
    • 2019-12-02
    • 2011-07-23
    • 2010-12-20
    • 2011-02-18
    相关资源
    最近更新 更多