2016-04-07 15 views
0

私はここに自分のコードのスニペットを持っています。私はJavascriptをかなり新しくしているし、私の人生はこれを理解することができない。だから、コードの一番下の部分がデータを取り込み、そのデータをテーブルに入れます。私がしたいのは、item.ReviewIdを取る最後の列のボタンをクリックすると、その人がレビューしているアイテムと一致するように隠れた入力をモーダルに自動的に設定することです。どんな助けもありがとう。私はそれをクリックすると、リストの最後の数字が自動的に入力されます。例えば、そこに3つの項目、20,21,22があり、私は最初のものをクリックして、それが本当に私は最高にそれを書き換えしようとするつもりだあなたのコードを理解せずに22隠し入力にデータの値を設定する

var success = function (result) {   

     $.each(result.Items, function (index, item) {    

      $('#reviewresults').dataTable().fnAddData([razorHelpers.formatDate(item.DateVisited), item.clientProfile.CompanyName, razorHelpers.formatCurrency(item.AmountSpent), item.ReviewId, '<button class="btn btn-blue" data-toggle="modal" data-target="#myModal" title="View" id="review">Review This Transaction <i class="fa fa-thumbs-up"></i></button>']); 

      console.log(item.ReviewId) 

      $("#review").on("click", function() { 
       test(item.ReviewId) 
      }); 

      function test(number) { 
       $("#reviewinput").val(number); 
      } 

     }); 

    };  

    ClientOpenReviewService.ListReviewsByConsumer(razorStorage.ExtractSessionData('userId'), 0, 0).done(success); 
+3

あなたは '$。each'の外で' test'関数を定義したいかもしれません。 –

+0

あなたはそれのjsfiddleを表示できますか? –

+0

あなたは常に最後のものを得ているのは、 'each'ステートメントがあるからです。最後の項目は常に非表示入力の値を設定します。正しい 'item'を使う代わりにループしなければならない理由はありますか? –

答えて

0

に移入した場合私の知識:。

function test(number) { 
    $("#reviewinput").val(number); 
} 

var success = function (result) { 
    $.each(result.Items, function(index, item) { 
    $('#reviewresults').dataTable().fnAddData(
     [razorHelpers.formatDate(item.DateVisited), 
     item.clientProfile.CompanyName, 
     razorHelpers.formatCurrency(item.AmountSpent), 
     item.ReviewId, 
     '<button data-review="'+item.ReviewId+'" class="btn btn-blue review" data-toggle="modal" data-target="#myModal" title="View" id="review-'+item.ReviewId+'">Review This Transaction <i class="fa fa-thumbs-up"></i></button>' 
     ] 
    ); 

    console.log(item.ReviewId) 
    }); 
}; 

$(document).ready(function() { 
    ClientOpenReviewService.ListReviewsByConsumer(razorStorage.ExtractSessionData('userId'), 0, 0).done(success); 

    $(".review").on("click", function() { 
    test($(this).data('review')); 
    }); 
}); 
+0

私を捨てているのは、「item.ReviewId」が.eachステートメントで定義されているということです。 –

+0

@JosephNylundああ、私の答えを編集する必要があります。しかし、まず 'item.ReviewId'の値を取得する' success'関数はありますか? –

+0

はい私はそう信じています。 '.each'ステートメントの外側のどこにでも移動すると、定義されなくなります。 –

0

あなたはクリックリスナー

を作成している各反復result.Itemsを通って、上でループしている

$( "#レビュー")上の(、機能を "クリック"() {})

このリスナーは、#review(ボタンまたはdivの場合があります)に追加されています。だから、#review要素にはいくつものリスナーが付いています。

#review要素がクリックされた後、すべてのリスナーが順次実行されているので、それはおそらく唯一のLAST要素を示しています。

私はこれを書いて説明しました。

<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script> 
</head> 
<body> 

<div id="review"> 
OK 

</div> 

<script> 

    result = {}; 
    result.Items = [ 
     { 
      ReviewId:1 
     }, 
     { 
      ReviewId:2 
     }, 
     { 
      ReviewId:3 
     }, 
     { 
      ReviewId:4 
     }]; 


    $.each(result.Items, function (index, item) { 

     $("div").on("click", function() { 

      test(item.ReviewId) 
     }); 

     function test(number) { 

      alert(number) 

      $("#reviewinput").val(number); 
     } 
    }); 

</script> 

</body> 
</html> 

clickイベントが4つの警告ボックスを作成し、最後の警告ボックスが配列の最後の番号であることがわかります。

さまざまな項目に#review_1#review_2などの要素がいくつかあると思います。あなたは思っているあなたのデザインを再考する必要があります。

関連する問題