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

时间:2014-02-27 14:38:57

标签: javascript jquery

我有一段代码:

$('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

位于同一行

这些都不起作用。为什么?我做错了吗?当我点击这种方式时,我在现场绑定的功能是否被考虑在内?

1 个答案:

答案 0 :(得分:2)

你需要在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');
            }
        }
    });
});