'这'是不是在jquery(ajax)工作

时间:2016-02-02 11:52:00

标签: jquery arrays ajax

我使用ajax更新数据库中的值。 我正在以ajax的形式得到回复,但 $(this).val()无法正常工作

看看我的ajax电话

jQuery(document).ready(function(){
    jQuery(".time_allocation_button").keyup(function(){
        //$(this).val('123');  //testing &  working
        var re = "";
        var data = {};
        data['time_allocation'] = jQuery(this).val();
        data['task_id'] = jQuery(this).data('task_id');
        data['project_id'] = jQuery(this).data('project_id');

        $.ajax({
        url: "<?php echo base_url('project/add_time_frame_to_project_task');?>",
        type: "POST",
        dataType: 'json',
        data:  data,
        success: function(data){
            if(data.type == 'error'){
                $("#time_frame_error").html('<div class="callout callout-danger bg-red">'+ data.msg + '</div>');
                $(this).val(data.reset_value); //not working
                alert(data.reset_value);   // working
            }else{
                $("#time_frame_error").html('<div class="callout callout-success bg-green">'+ data.msg + '</div>');
            }
        },
        error: function(){
        }      

        });

    });
});

5 个答案:

答案 0 :(得分:1)

在普通JavaScript中,每个函数调用都会创建自己的上下文变量(即this),除非采取特殊措施,否则嵌套内部函数中的list将与外部函数中的this不同。

最简单的解决方案是将外部$this及其jQuery对象分配为例如jQuery(...).keyup(function() { var $this = $(this); ... $.ajax({ success: function() { $this.val(...) // uses the variable from the outer scope ... }); }); ... }); ,然后在内部回调中使用该变量:

$(this)

答案 1 :(得分:1)

使用$.ajax({ context: this, /*...*/ }); 方法的相关ajax选项设置相关上下文,否则ajax回调中的上下文设置为ajax选项对象:

(check-sat)

答案 2 :(得分:0)

你在内部通话中失去了this,你应该使用类似$ jQuery(document).ready(function() { jQuery(".time_allocation_button").keyup(function() { var $this = $(this) //... success: function(data) { ///... $this.val(data.reset_value); 的东西来保持它

NSMutableString *searchedString = [NSMutableString stringWithString:self.postTxtView.text];
NSError* error = nil;

NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"(:D|:))" options:0 error:&error];
NSArray* matches = [regex matchesInString:searchedString options:0 range:NSMakeRange(0, [searchedString length])];
for ( NSTextCheckingResult* match in matches )
{
    NSString* matchText = [searchedString substringWithRange:[match range]];
    NSLog(@"match: %@", matchText);
}

答案 3 :(得分:0)

成功函数有自己的上下文和自己的(函数本身)

你必须使用一个闭包

SCard.Connect Error 0x8010000B: The smart card cannot be accessed because of other connections outstanding!
A first chance exception of type 'GS.SCard.WinSCardException' occurred in GS.CSharpPCSC.dll

答案 4 :(得分:0)

this的值会发生变化,具体取决于您的通话范围。直接在keyup处理程序内,它引用了ajax调用的success回调内的元素,但它没有。

解决方案是在success回调之外缓存引用并在其中使用它。

jQuery(".time_allocation_button").keyup(function(){
   var $button = $(this);
   ....
    $.ajax({
            ....
           success: function(){
                $button.val("123");
           }   
           ....
          )
   ....
});