1

我有一个带有 class 的 div abc。有一个 jQuery 函数,它使用其类选择该 div 并发出 ajax 请求。现在,当成功返回 ajax 函数时,我已经更改了类,以便 ajax 方法不应该被再次调用,直到它的 div 类abc。但是发生的情况是,即使在将 div 的类更新为xyz相同的 ajax 函数之后也会再次调用。

success: function(data){
                    //updating the class here
                    $(self).addClass('xyz').removeClass('abc');
                }

我可以在源代码中看到该类已更新,但仍然相同的属性选择器选择较早的类并再次运行 ajax 方法。还有其他方法可以做我想做的事情吗?请帮忙!提前致谢。

编辑:

$('.up_arrow').each(function() {
    $(this).click(function(event) {

        var resid = $(this).attr('name');

        var post_data = {
            'resid' : resid,
            '<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>'
        };

        var self = this;

        if(resid){
            $.ajax({
                type: 'POST',
                url: "/ci_theyaw/restaurants/plusrepo",
                data: post_data,
                success: function(data){
                    //console.log($(this).siblings('.rep_count').text());
                    $(self).addClass('up_arrowed').removeClass('up_arrow');
                    $(self).css('background-position','0 40px');
                    $(self).next('.rep_count').html(data);
                },
                error: function (xhr, ajaxOptions, thrownError) {
                    alert(xhr.status);
                    console.log(xhr.responseText);
                    alert(thrownError);
                }
            });
        }
    });
});

这是完成这项工作的完整功能。这里要更新的类是up_arrow-> up_arrowed,函数的选择器是up_arrow. 但更新后它仍然执行。

4

1 回答 1

2
$('.up_arrow').each(function() {

这里发生的是 jQuery 查找up_arrow 此时具有该类的所有元素并将事件直接附加到这些元素。之后,即使课程发生变化,课程也不再重要。

如果您.on()改用:

$( document ).on( 'click', '.up_arrow', function(event) {
    var resid = $(this).attr('name');
    // etc

...现在选择器在用户单击页面时.up_arrow进行评估,而不是在第一次执行代码时进行评估。您还可以更改为包含所有元素的公共静态元素。document.up_arrow


不相关的旁注:如果.click()在其他情况下使用(在这种情况下你不能使用它)你不需要使用.each()简单的点击处理程序;只是做$('.selector').click(function() {。它将自动应用于每个元素。

于 2013-10-10T11:17:11.920 回答