2011-09-03 53 views
0

我有以下的jQuery腳本...jQuery,在父函數上使用.find?

$(function() { 
    $('.eventWrapper').bind('click', function(event) { 

     var srvName = $(this).data('service'); 
     var srvVal1 = $(this).data('serviceval'); 

     if (srvName == 'livestream') 
     { 
      var query = 'http://x'+srvVal1+'x.api.channel.livestream.com/2.0/livestatus.json?callback=?'; 
      $.getJSON(query, function(data) 
      { 
       if (data['channel']['isLive']) 
       { 
        $(this).find('.eventTime').html('<b>Currently Live</b> ('+data['channel']['currentViewerCount']+' viewers)'); 
       } 
      }); 
     } 
    }); 
}); 

它是在下面的代碼運行:

<div class="eventWrapper" data-service="livestream" data-serviceval="srklive"> 
    <div class="eventIcon"><a href=""><img src="image.php?u=3942"></a></div> 
    <div class="eventName"><a href="">This is a test!</a></div> 
    <div class="eventTime">09-02-2011 08:00 PM</div> 
</div> 

它相當自我解釋...它綁定到類.eventWrapper。當有人點擊div中的任何位置時,它會檢查數據。如果數據匹配,它將提取JSON查詢。這到目前爲止工作得很好。

現在的問題是如何將.eventTime類中的文本替換爲它應該包含的內容。顯然,我不能使用$(this),因爲它涉及到現有的getJSON函數,而不是綁定函數。我將如何正確地做到這一點?

此外,我如何獲得事件激活頁面加載,而不是點擊?

回答

2

店這是一個變量,以便你指的是正確的上下文$ .getJSON的回調中使用/本

$(function() { 
    $('.eventWrapper').bind('click', function(event) { 
     var $this = $(this); 
     var srvName = $(this).data('service'); 
     var srvVal1 = $(this).data('serviceval'); 

     if (srvName == 'livestream') 
     { 
      var query = 'http://x'+srvVal1+'x.api.channel.livestream.com/2.0/livestatus.json?callback=?'; 
      $.getJSON(query, function(data) 
      { 
       if (data['channel']['isLive']) 
       { 
        $this.find('.eventTime').html('<b>Currently Live</b> ('+data['channel']['currentViewerCount']+' viewers)'); 
       } 
      }); 
     } 
    }); 
}); 
+0

感謝...奏效。現在如何讓這個腳本在頁面加載時運行,而不是點擊? –

+0

我認爲你的措辭有點偏離。我會說「將'this'存儲爲'$ .getJSON'回調中使用的變量,因此您指的是正確的上下文/'this'(或者是這個效果),但是+1,點亮。 – karim79

+0

@ karim79:對不起,我不是母語的人編輯 – genesis

1
請問

這項工作?

$('.eventWrapper').bind('click', function(event) { 

    var srvName = $(this).data('service'); 
    var srvVal1 = $(this).data('serviceval'); 
    var evtTime = $(this).find('.eventTime'); 

    if (srvName == 'livestream') 
    { 
     var query = 'http://x'+srvVal1+'x.api.channel.livestream.com/2.0/livestatus.json?callback=?'; 
     $.getJSON(query, function(data) 
     { 
      if (data['channel']['isLive']) 
      { 
       evtTime.html('<b>Currently Live</b> ('+data['channel']['currentViewerCount']+' viewers)'); 
      } 
     }); 
    } 
});