2016-05-08 2 views
0

コールバック関数に問題があります。ボタンをクリックするとウィンドウ属性があるのがこの理由だと思います。これはコードボタンをクリックしたときのウィンドウの属性

  function removeProduct(callback) { 
      var recordchosen = $(this);   ////////here I have WINDOW instead button 
      var recordToDelete = recordchosen.attr("data-id");  
      if (recordToDelete != '') { 

       // Send post request with AJAX 
       $.post("/Cart/RemoveFromCart", { "albumID": recordToDelete }, 
        function (response) { 
         // Success  
         $('#productCart-' + response.prodID).fadeOut('slow', function() { 
          if (response.productsCart == 0) { 
           $("#cartEmpty").removeClass("hidden"); 
          } 


         }); 
         var textCart = $("#cartbox").text(); 
         var amountCart = (parseInt(textCart) - 1); 
         $("#cartbox").text(amountCart); 

        }); 
       callback(); 
       return false; 
      }; 
     }; 

     $(".removeProduct").click(function() { removeProduct(updateTotal) }); 

私が間違っていることを知っていますか?

+0

あなたがコールバックを持っているなら、あなたは何も返さないでください。あなたがコールバックを持っているならば、あなたは何も返してはいけません。($。 "removeProduct" – Nonemoticoner

答えて

0

短い答えは、ボタンは直接removeProductを起動されていないためthisはコンテキストを失っているということです。代わりに、無名関数を渡してからremoveProductを呼び出します。非厳密モードでは、JavaScriptはthisの定義されていない値をwindowに強制します。

$(".removeProduct").click(function() { 
    removeProduct.call(this, updateTotal); 
}); 

匿名関数は、このの適切なコンテキストを持っているので、我々はthisを使用してremoveProductを呼び出すことができますコメントで述べたように私は1つの調整になるだろうが、あなたは、コール・アプローチを使用することができ、それを解決するために

無名関数から。

私はこの問題は非常によく、一般的にオンラインこのサイトに記載され以来、はるかに詳細に行きたいが、あなたはここにどのようにcall作品についての詳細を読みたい場合は文書ではありません。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call

関連する問題