我使用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(){
}
});
});
});
答案 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");
}
....
)
....
});