Javascript 为什么触发器和单击在这种情况下不起作用?

Javascript 为什么触发器和单击在这种情况下不起作用?,javascript,jquery,Javascript,Jquery,我有一段代码可以: $('td.unique').live('click', function () { //function logic here }); 当我点击我的桌子的td时,这个效果很好。一切都好 现在,我希望能够在某些情况下通过编程实现相同的功能,而无需用户实际按下“单击”。 我试过: $(document).ready(function() {

我有一段代码可以:

$('td.unique').live('click', function () {  
//function logic here  
}); 
当我点击我的桌子的td时,这个效果很好。一切都好
现在,我希望能够在某些情况下通过编程实现相同的功能,而无需用户实际按下“单击”。
我试过:

$(document).ready(function() {                                                                                                                                              

    $(".clearButton").click( function () {                                                                                                                                
        var username = $(this).closest('tr').find('input[type="hidden"][name="uname"]').val();                                                                                     
        var user_id = $(this).closest('tr').find('label').val();                                                                                                             

        var input = [];                                                                                                                                                    
        input[0] = {action:'reset', id:user_id,user:username,};                                                                                                                 
        $.ajax({                                                                                                                                                            
            url: 'updateprofile.html',                                                                                                                               
            data:{'user_options':JSON.stringify(input)},                                                                                                                     
            type: 'POST',    
            dataType: 'json',                                                                                                                                               
            success: function (res) {                                                                                                                                        
                if (res.status >= 1) {                                                                                                                                       
                    //all ok                                                                                                                                                
                    console.log("ALL OK");                                                                                                                               
                     $(this).closest('tr').find('.unique').trigger('click');  
          $(this).closest('tr').find('td.unique').trigger('click');  
          $(this).closest('tr').find('td.unique').click();  


                }                                                                                                                                                           
                else {                                                                                                                                                      
                    alert('failed');                                                                                                                                        
                }                                                                                                                                                           
            }                                                                                                                                                               
        });
此按钮与
td.unique
位于同一行

这些都不管用。为什么?我做错了吗?当我以这种方式单击时,是否没有考虑我在live中绑定的函数?

您需要在ajax函数中缓存$(this)

var $this = $(this);
ajax函数中的$(this)将不会引用所单击的元素

$(".clearButton").click(function () {
    var $this = $(this);
    var username = $this.closest('tr').find('input[type="hidden"][name="uname"]').val();
    var user_id = $this.closest('tr').find('label').val();
    var input = [];

    input[0] = {
       action: 'reset',
       id: user_id,
       user: username,
    };

    $.ajax({
        url: 'updateprofile.html',
        data: {
            'user_options': JSON.stringify(input)
        },
        type: 'POST',
        dataType: 'json',
        success: function (res) {
            if (res.status >= 1) {
                console.log("ALL OK");
                $this.closest('tr').find('.unique').trigger('click');
                $this.closest('tr').find('td.unique').trigger('click');
                $this.closest('tr').find('td.unique').click();
            } else {
                alert('failed');
            }
        }
    });
});

如果您提供HTML源代码或其示例,它将帮助人们回答您的问题。“从jQuery 1.7开始,.live()方法已被弃用。请使用.on()来附加事件处理程序。较旧版本的jQuery用户应优先使用.delegate(),而不是.live()。”-此处将哪个元素称为
this
???还有显示您的标记(html)请发布html,“this”指的是什么?我猜问题是ajax调用中的$(this),我认为它不再指按钮了。尝试缓存$(this),然后在ajax函数中使用它。我不是ajax专家,在其他情况下它是不需要的。我不知道为什么它现在很重要。但是它在这种情况下非常有效,因为$(this)在ajax调用的success函数中。如果您使用了大量的$(this),那么缓存它总是一个好主意,这样jquery就不需要每次都保持$9this)。在工作中,如果我们不止一次地使用某个东西,我们会缓存它以减少开销