2011-04-22 4 views
2

jquery를 사용하여 서버 측 메서드를 호출하려고하는데, 클라이언트 측에서 동적으로 생성 된 텍스트 상자의 textchange 이벤트에서이 ID를 가져 오는 방법을 알지 못합니다. 누군가 내가이 일을하도록 도울 수 있습니까? 다음과 같이 사용하여 스크립트 메신저는 다음과 같습니다jquery를 사용하여 서버 측 메소드를 호출하는 방법은 무엇입니까?

<script type="text/javascript"> 

    $(init); 

    function init() { 

     $('#test').droppable( //Div Control where i'll be dropping items 
      { 
       drop: handleDropEvent 
      }); 

     $('a').each(function(idx, item) { 
     $(item).draggable({ cursor: 'move', helper: 'clone' }) 
     }); 
    } 

    function handleDropEvent(event, ui) { 
     var draggable = ui.draggable; 
     document.getElementById('test').innerHTML += addColumn(draggable.attr('text')) + '<br>'; 
    } 
    $('.textChangeClass').live('change', function() { 
/* Evokes on the text change event for the entire textboxes of class .textChangeClass. Is it possible to specify the dynamic textbox generated @ clientside here? (like for e.g. : $('#mytextbox').click(function()) */ 

    $.ajax({ 
     type: "POST", 
     url: "Webtop.aspx/ServerSideMethod",   //This is not getting called at all. 
     data: "{'param1': AssignedToID}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     async: true, 
     cache: false, 
     success: function(msg) { 
     alert("From Server"); 
     } 
    }) 

    }); 

    }); 
    function addColumn(column) { 

     var iHtml; 

     //This is how i'm generating the textboxes along with a checkbox bound by a div. 
     iHtml = '<div id="dv' + column + '" width="100px;" height="20px;" padding: "0.5em;">&nbsp;' + '<span title="ToolTipText">' + '<input type="checkbox" id="cb' + column + '" value="' + column + '" /> <label for="cb' + column + '">' + column + '</label></span><input class="textChangeClass" type="text" id="aln' + column + '">&nbsp;</div>'; 
     return iHtml 
    } 
    </script> 
+0

오류 응답 기능을 youar ajax 호출에 추가했습니다. 내 대답은 –

+0

입니다. 문제의 해결책은 클라이언트 측 코드 (JavaScript 코드)뿐만 아니라 서버 코드에도 의존합니다. 나를 위해 당신이 어떻게 서버 방법을 구현하는 절대적으로 불분명하다.가장 쉬운 방법은 ASMX 웹 서비스 또는 WCF 일 것이지만이 경우 url은'Webtop.asmx/ServerSideMethod' 또는'Webtop.svc/ServerSideMethod'이어야합니다. 질문에 서버 코드에 대한 추가 정보를 포함 시키거나 코드 조각을 포함 시키십시오. – Oleg

답변

1
  1. 나는 ")};"당신은 여분의 생각 이것은 아마도 문제가 아니지만.
  2. "AssignedToID"란 무엇입니까? 그 주위에 작은 따옴표를 추가하십시오. 몇 년 전에 json에서 인용문과 관련된 이상한 문제가 있었던 것을 기억하는 것 같습니다.
  3. Fiddler/firebug/etc에서 요청을 볼 수 있습니까? 내용이 정확합니까?

유추 된 세미콜론도주의해야합니다. 만약 당신이 자바 스크립트를 축소했다면 (예, 이것이 임베디드임이 확실합니다. 그러나 언젠가 그것이 분리 된 js 파일로 옮겨지기를 희망합니다.) 결국에는 문제가 생길 것입니다. 다른 개발자가 따라오고, 리팩토링을하고, ajax 호출 후에 반환 값을 추가해야한다고 상상해보십시오.

$.ajax({...})return foo} 

편집

피들러/방화범 넷 패널 그들은 당신이 요청과 서버의 응답을 검사 할 수 있습니다 ... 당신의 친구입니다. 이 방법은 당신이 (당신이 결국 다른 이유로 할 수 있지만)

편집

질문의 다른 부분에 대답하기 위해, 당신의 텍스트 상자에 액세스 할 수있는 오류 처리기를 추가 할 필요가 없습니다 change 이벤트는 이벤트 처리기 내부에서 'this'키워드를 사용하여 트리거되었습니다.

$('.textChangeClass').live('change', function(event) { 
    //Note that the 'event' parameter has interesting things in it too. 
    var changedText = $(this).val(); 
    alert("The value in the textbox is: '" + changedText + "'"); 
    var data = { 
     param1: changedText 
    }; 
    $.ajax({ 
     ... 
     //Using json2 library here to create json string 
     data: JSON.stringify(data), 
     ... 
    }); 
}); 

이벤트 처리기에 선택적 'event'매개 변수를 추가했음을 유의하십시오. 그것은 흥미로운 것들을 가지고 있으며 jQuery를 처음 접하는 사람들이 종종 간과하는 것입니다. 그것에 대해 읽으십시오 here.

+0

매개 변수를 제거하고 서버 측 메소드에 도달하려고했습니다. 그러나 아직도 didnt 한 일. 방화범이났다. 스크립트와 함께 사용하는 방법을 모릅니다. – NewBie

+0

1. 방화 밧줄을 열고 '인터넷'탭으로 이동하십시오. 사용 설정 방법을 따르십시오. 2. 페이지를 새로 고침 3. 원하는 텍스트 상자에 변경 이벤트를 실행하십시오. 4. 서버에 대한 아약스 호출 참조 (또는 해당 없음) – drstevens

+0

또한 자바 스크립트도 디버깅 할 수 있습니다. 스크립트 테이블로 가서 활성화하십시오. 이벤트 처리기에 중단 점을 설정하고 작동되는 부분을 볼 수 있습니다. 당신이 용감하다면 jquery 코드를 사용할 수도 있습니다. 스크립트와 넷 디버깅을 켜 놓으면 일반적인 탐색 속도가 느려지므로 방화범 입력이 해제되어 있는지 확인해야합니다. 또는 스크립트와 넷 디버깅이 정상적인 탐색을 위해 꺼져 있는지 확인해야합니다. – drstevens

1

당신은 그렇지 않으면 불을 얻을 것 텍스트 상자의 생성 후 텍스트 상자에 이벤트를 추가하는 당신에게 코드를 작성해야합니다.

바로 위 단계가 작업

편집을 할 것입니다 따라 텍스트 상자에 텍스트 상자 또는 바인드 이벤트에 이벤트를 추가하는 코드를 작성 후 텍스트 상자

  • 를 추가

    아약스 호출에 오류 기능을 추가하면 오류가 발생합니다 ... 계속 하시겠습니까

    $.ajax({ 
        type: "post", url: "/SomeController/SomeAction", 
        success: function (data, text) { 
         //... 
        }, 
        error: function (request, status, error) { 
         alert(request.responseText); 
        } 
    }); 
    
  • +0

    동적 텍스트 상자에 어떻게 바인딩 할 수 있습니까? – NewBie

    +0

    사실 텍스트 상자의 textchange에 이벤트가 발생했지만 Ajax 부분이 작동하지 않습니다. – NewBie

    관련 문제