0

我认为当需要对基于 Ajax 返回的元素进行简单的 css 更改时,我的“this”范围存在问题。

$('.time_slot_holder').click(function(){
    var data_day=$(this).data('agent_day');
    var data_time=$(this).data('agent_time');
    var data="agent_id="+agent_id+"&day="+data_day+"&time="+data_time
    $.ajax({
        type:"POST",
        url:"admin_includes/book_time.php",
        data:data,
        success:function(html){
            var split_html=html.split("|")
            if(split_html[0]=="B"){
                //booking exists
                alert("Bookings for this time slot exist. Contact Agent to arrange a re-assignment of this appointmnet.");
            }
            if(split_html[0]=="C"){
                //added to db
                $(this, '.time_slot_holder').css('background-color', 'red');
            }
            if(split_html[0]=="D"){

            }
        }
    });//end ajax
});

我要做的就是用元素 .time_slot_holder 改变网格上的颜色

忽略来自 ajax 请求的笨拙的拆分回调,这只是试图通过数据属性识别元素。基本上我需要通过ajax的回调来获取点击元素的引用。

4

2 回答 2

1

您应该将contextAJAX 请求中的选项设置为this;

$.ajax({
    type:"POST",
    url:"admin_includes/book_time.php",
    context: this,
    //..
});

否则,this最终成为jqXHR对象。

另一种(更常见的)方法是将 的值存储 this在另一个变量中;

var that = this;

$.ajax({
    type:"POST",
    url:"admin_includes/book_time.php",
    data:data,
    success:function(html){
        // Use `that` instead of `this` in here.
    }
});//end ajax

另外,我不确定$(this, '.time_slot_holder')应该选择什么,但我不确定它会起作用(需要查看您的 HTML 标记)。

如果this是 的后代'.time_slot_holder',那么它会正常工作。

于 2012-07-03T15:01:47.430 回答
1

使用 jQuery 元素作为上下文

$('.time_slot_holder').click(function(){
    var data_day=$(this).data('agent_day');
    var data_time=$(this).data('agent_time');
    var data="agent_id="+agent_id+"&day="+data_day+"&time="+data_time

    $.ajax({
        type:"POST",
        url:"admin_includes/book_time.php",
        data:data,
        context : $(this),
        success:function(html){
            var split_html=html.split("|")
            if(split_html[0]=="B"){
                //booking exists
                alert("Bookings for this time slot exist. Contact Agent to arrange a re-assignment of this appointmnet.");

            }
            if(split_html[0]=="C"){
                //added to db
                $(this).css('background-color', 'red');
            }
            if(split_html[0]=="D"){

            }


        }
    });//end ajax

});
于 2012-07-03T15:09:21.830 回答