2016-08-25 5 views
0

장바구니 관리에 걸린 전자 상거래 사이트에서 작업하고 있습니다. 기본적으로 로그인하기 전에 제품을 세션에 보관하고 Ajax를 사용하여 세션에 저장된 제품 수량을 업데이트하려고합니다. 나는 '수량 변경'을 쓸 때마다 변경된 값이 '수량'열에 반영되어야 함을 의미합니다.TextBox 값 변경 및 Ajax 호출 업데이트

참고 : 나는 게시물을 짧게 만들고 디버깅하는 동안 왜 발사하지 않았는지 알아 냈습니다. 실제로 관련 제품의 ID를 알 수 없었습니다. 이제는 이드를 지나친 다. 그게 전부 야. 이제 또 다른 문제가 있습니다 - TextBox는 for 루프로 동적으로 생성됩니다. 나는 텍스트 상자가 동적으로 생성하는 방법을 알아 내기 위해 개발자 도구를 사용하고이 같은 것입니다 : 나는 동적으로 생성 된 텍스트 상자에서 양 또는 값을 잡아하는 방법을 궁금

For Product 1: cartDetails_0__Quantity 
For Product 2: cartDetails_1__Quantity 

. 생성 된 id를 HTML에서 Ajax로 직접 저장하면 수량이 업데이트된다. 그렇지 않으면 그렇지 않습니다. Ajax에서 루프를 사용하려고 시도했지만 생각이 잘못되었습니다. 보기을 참조하십시오.

뷰 : 여기

<table border="1" width="100%" cellpadding="4"> 
    <thead> 
     <tr> 
      <th style="text-align:center;">Name</th> 
      <th style="text-align:center;">Price</th> 
      <th style="text-align:center;">Quantity</th> 
      <th style="text-align:center;">Quantity To Change</th> 
     </tr> 
    </thead> 
    <tbody> 
     @if (ViewBag.CartDetails != null) 
     { 
      for (int i = 0; i < cartDetails.Count(); i++) 
      { 
       <tr> 
        <td style="text-align: center; display:none;">@Html.DisplayFor(model => cartDetails[i].ProductId)</td> 
        <td id="ID" style="text-align: center;">@Html.DisplayFor(model => cartDetails[i].ProductName)</td> 
        <td style="text-align: center;">@Html.DisplayFor(model => cartDetails[i].Price)</td> 
        <td style="text-align: center;">@Html.DisplayFor(model => cartDetails[i].Quantity, new { @class = "quantityUpdate" })</td> 
        <td style="text-align: center;">@Html.TextBoxFor(model => cartDetails[i].Quantity, new { @class = "quantity", data_id = cartDetails[i].ProductId })</td> 
      </tr> 
      } 
     } 
    </tbody> 
</table> 

<script src="~/Scripts/jquery-1.10.2.min.js"></script> 
<script type="text/javascript"> 
var url = '@Url.Action("UpdateCart")'; 
$(".quantityUpdate").change(function() { 
    var id = $(this).data('id'); 

    var i = 0; 
    $('.quantityUpdate').each(function (i, item) { 
     $.post(url, { id: id, Quantity: $("#cartDetails_"+i+"__Quantity").val() }, function (response) { 
      if (response) { 
       $("#TotalPrice").load(window.location + " #TotalPrice"); 
      } 
     }); 
    }) 

    alert(id); 
    alert($("#cartDetails_"+i+"__Quantity").val()); 
}); 

내가 노력하고 이미지 샘플입니다 :

Update On Quantity Change

+0

당신은 브라우저 오른쪽 디버깅? 클라이언트 측 (서버 측 아님) 코드로 비주얼 스튜디오에서 디버거를 절대로 치지 않습니다. 이벤트를 등록하기 위해 페이지가로드 될 때 코드에 도달 했습니까? 또한 서버의 post 메소드는 ajax를 URL 대신 보내도록 변경하지 않는 한 객체와 2 개의 매개 변수를 받아 들일 수 없습니다. – Igor

+0

실제로 컨트롤러에서 디버깅을 시도했습니다. Ajax에는 메소드가 있습니다. 적어도 Ajax에있는 메소드가 있다면, 이해할 수 있습니다. 바로 지금 그것을 해결하려고 노력합니다. –

+0

나는 매우 분명하지 않았습니다, 미안 해요. 코드가 자바 스크립트에서 아약스 호출에 도달하지 못했다고 가정하고 그 부분에서 중단 점을 지정합니다. 1 단계입니다. 아약스 전화가 발사되는지도보십시오. 브라우저에서 그렇게해야합니다. 중단 점을 사용하여 디버깅하거나 네트워크 활동이 브라우저에서 무엇인지 (있는 경우) 확인할 수 있습니다. 일단 당신이 그 불을 붙이면 그 컨트롤러를 때리는 지 (또는 왜 안되는지) 알아 내십시오. – Igor

답변

1

아이디어는 당신이 .quality 텍스트 상자의 값을 변경할 때 아약스를 호출하는 경우 다음과 같이하십시오.

$('.quantity').change(function(){ 
    //your ajax call 
}); 
+1

@Igor - 오ops, 오타가 수정되었습니다. 고맙습니다 – Developer

2
,210

즉시 변경

$('.quantity').keyup(function(){ 
     $('.quantityUpdate').val($('.quantity').val()); 
     // put code here 
    });