2010-03-09 3 views
0

jQuery가 진행률 표시 줄로 바뀌는 div 목록이 있습니다. .ready에서 모든 진행 막대의 목록을 만들고 각각에 대해 진행률 표시 줄의 전체 길이를 나타내는 값을 가져 오는 웹 서비스를 호출합니다. 이렇게하려면 div의 ID를 웹 서비스에 전달해야합니다. div의가있는 ListView 내부에 있기 때문에jQuery에서 C# 웹 서비스 (JSON 사용)에 요소의 ID 전달

, 나는 수동으로 ID = "completionbar_ <퍼센트 번호 평가 ("MilestoneID ")로 ID를 설정 %>"

그러나, 나는 내 웹 서비스에이 ID를 통과 할 때 매번 "정의되지 않은"것으로 나타납니다. 소스를 볼 때 올바르게 설정된 것처럼 보입니다. 지금 아무것도하지 않는 웹 서비스 스텁 여기

<script type="text/javascript" language="javascript"> 
$(document).ready(function() { 
    $(".MilestoneCompletion").progressbar({ value: 0 }); 
    $.each($(".MilestoneCompletion"), function(index, barDiv) { 
     $.ajax({ 
      type: "POST", 
      url: "ProjectTracking.aspx/GetText", 
      data: "{'id':'" + $(barDiv).id + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      async: true, 
      success: 
       function(msg) { 
        $(barDiv).progressbar("value", msg.d); 
       } 
     }); 
    }); 
}); 
</script> 

입니다 :

여기
[System.Web.Services.WebMethod] 
public static int GetText(string id) 
{ 
    return 75; // returns completion percent 
} 

내가의 ID를 설정하고있어 어디

다음 서비스 내 웹 호출하는 jQuery의 ListView의 div :

<ItemTemplate> 
<li class="ui-widget-content" > 
... 
<!-- when this div loads, I want to call my webservice --> 
<div id="completionbar_<%# Eval("MilestoneID") %>" class="MilestoneCompletion" style="height:30px;"></div> 
... 
</li></ItemTemplate> 

나는 스크립트가 DIV id보다 먼저 실행되고 있다고 생각합니다. i ListView 데이터 바인딩에 의해 설정된?

이 문제를 해결할 수 있습니까, 아니면 내 방식에 근본적인 결함이 있습니까?

+0

이 점은 각 진행률 표시 줄을 75 %로 올바르게 채 웁니다. –

답변

2

$(barDiv).attr('id')

+0

고마워요! jQuery를 처음 사용합니다. –

+0

그것은 일반적인 잡았다. 내가 jQuery 객체에서'.id'를 직접 얻을 수 있다고 가정 한 횟수를 말할 수 없습니다. – Plynx

0

확실하지 않음이 문제에 관련이 있지만, 나는 그것이 있어야한다고 생각하는 경우 :

업데이트 : 만 사업부 참조하는 함수 내에서 this를 사용하여 다음 function(index)에 통과해야합니다

$(".MilestoneCompletion").each(function(index) { 
    ... 
    $(this).progressbar("value", msg.d); 
+0

네, 확실히 당신의 문제와 관련이 없습니다. –