0

これは私のHTMLコードです:

<div id="editorRows">
  <div class="editorRow">
     <input type="hidden" value="01c4ed6d-1234-4951-b048-d86208636479" autocomplete="off" name="comds.index">
     Grupa:
     <select id="comds_01c4ed6d-1234-4951-b048-d86208636479__Grupa" name="comds[01c4ed6d-1234-4951-b048-d86208636479].Grupa">
     Produsul:
     <select id="comds_01c4ed6d-1234-4951-b048-d86208636479__Produs" name="comds[01c4ed6d-1234-4951-b048-d86208636479].Produs">
     Cantitate:
     <input id="comds_01c4ed6d-1234-4951-b048-d86208636479__Cantitate" type="text" value="0" name="comds[01c4ed6d-1234-4951-b048-d86208636479].Cantitate" data-val-required="The Cantitate field is required." data-val-number="The field Cantitate must be a number." data-val="true">
      Pret:
      <input id="comds_01c4ed6d-1234-4951-b048-d86208636479__Pret" type="text" value="17.23" size="4" name="comds[01c4ed6d-1234-4951-b048-d86208636479].Pret" data-val-required="The Pret field is required." data-val-number="The field Pret must be a number." data-val="true">
      TVA:
      <input id="comds_01c4ed6d-1234-4951-b048-d86208636479__TVA" type="text" value="0.24" name="comds[01c4ed6d-1234-4951-b048-d86208636479].TVA" data-val-required="The TVA field is required." data-val-number="The field TVA must be a number." data-val="true">
      Total:
      <input id="comds_01c4ed6d-1234-4951-b048-d86208636479__Total" type="text" value="0" name="comds[01c4ed6d-1234-4951-b048-d86208636479].Total" data-val-required="The Total field is required." data-val-number="The field Total must be a number." data-val="true">
      <a class="deleteRow" href="#">Sterge</a>
    </div>

    <div class="editorRow">
        <input type="hidden" value="97b4ac65-73f8-4339-a707-bad53763fb2e" autocomplete="off" name="comds.index">
        Grupa:
        <select id="comds_97b4ac65-73f8-4339-a707-bad53763fb2e__Grupa" name="comds[97b4ac65-73f8-4339-a707-bad53763fb2e].Grupa">
        Produsul:
        <select id="comds_97b4ac65-73f8-4339-a707-bad53763fb2e__Produs" name="comds[97b4ac65-73f8-4339-a707-bad53763fb2e].Produs">
        Cantitate:
        <input id="comds_97b4ac65-73f8-4339-a707-bad53763fb2e__Cantitate" type="text" value="0" name="comds[97b4ac65-73f8-4339-a707-bad53763fb2e].Cantitate">
        Pret:
        <input id="comds_97b4ac65-73f8-4339-a707-bad53763fb2e__Pret" type="text" value="17.23" size="4" name="comds[97b4ac65-73f8-4339-a707-bad53763fb2e].Pret">
        TVA:
        <input id="comds_97b4ac65-73f8-4339-a707-bad53763fb2e__TVA" type="text" value="0.24" name="comds[97b4ac65-73f8-4339-a707-bad53763fb2e].TVA">
        Total:
        <input id="comds_97b4ac65-73f8-4339-a707-bad53763fb2e__Total" type="text" value="0" name="comds[97b4ac65-73f8-4339-a707-bad53763fb2e].Total">
        <a class="deleteRow" href="#">Sterge</a>
      </div>
   <div class="editorRow">.....
</div>

したがって、より多くのアイテムを表示するために部分ビューをレンダリングしており、さらに多くのアイテムを作成するアクションがあります。最初のDropDownListの値を変更して、2番目の値を再設定するときに、Json関数を呼び出そうとしています。これは私のスクリプトです:UPDATE

             <script type="text/javascript">
            $(document).ready(function () {
            $('name$=.Grupa').change(function () {

                var url = '<%= Url.Content("~/") %>' + "Comenzi/ForProduse";
                var ddlsource = $(this);
                var ddltarget = $(this).siblings('[name$=.Produs]:first');
                $.getJSON(url, { id: $(ddlsource).val() }, function (data) {
                    $(ddltarget).empty();
                    $.each(data, function (index, optionData) {
                        $(ddltarget).append("<option value='" + optionData.Value + "'>" + optionData.Text + "</option>");
                        });

                    });
                });
            });
       </script>

コントローラからのJsonアクションが呼び出されていません。動作させるには、スクリプトで何を変更する必要がありますか?ありがとう!

4

2 に答える 2

1

私が見逃していない限り、それ$('.editRow.Grupa')はあなたのhtmlの何にも一致していないようです。editRowこれは、とのクラスを持つすべての要素を検索することを意味しますGrupa。クラスが。の要素はありませんGrupa

アイテムを選択する有効な方法については、次のセレクターのリストを参照してください。

http://api.jquery.com/category/selectors/

$('.editRow .Grupa')セレクターをに変更してGrupaselectにクラスを追加すると、セレクターは閉じますGrupa

これが言っていることは、のクラスを持つ要素の中にあり、のクラ​​スを持つすべての要素を取得するということeditRowですGrupa。セレクターは、クラスeditRowと。の両方を持つすべての要素が必要であると言っていますGrupa

于 2011-06-17T16:50:13.557 に答える
1

これが唯一の問題かどうかはわかりませんが、作成しているセレクターは、作成しようとしているものではないと思います。

.editRow.Grupa

要素をクラスeditRowおよびクラス.Grupaと一致させます

私はこの行だと思います:

var ddlsource = '.editRow.Grupa';

おそらくただのはず$(this)です;
そしてあなたのvar ddlsource = '.editRow.Grupa';

次のようなものにする必要がありますvar target = $(this).siblings('[name$=.Produs]:first');

そして、これらのいずれか:$(ddltarget) 代わりにターゲットにする必要があります。

このようなもの:

$(document).ready(function () {
         $('[name$=.Grupa]').change(function () {   //targets things with the name ending in .Grupa

            var url = '<%= Url.Content("~/") %>' + "Comenzi/ForProduse";
            var source =$(this); //this will be which ever one is changed
            var target = $(this).siblings('[name$=.Produs]:first');  //this SHOULD find the first select with a name ending in .Produs that is the sibling (same level in the dom to the changed select)
            $.getJSON(url, { id: source.val() }, function (data) {
                      target.empty();
                      $.each(data, function (index, optionData) {
                      target.append("<option value='" + optionData.Value + "'>" + optionData.Text + "</option>");

                  });

               });
            });
          });

私はこれをテストしていませんが、それはあなたが何のために行く必要があるかについての一般的な考えです。注意してください、私が使用しているセレクターは非常に非効率的です。生成されたコードを変更して、選択ボックスに既知のクラスが含まれるようにすると、コードがより整理され、より効果的になります。

于 2011-06-17T17:01:45.783 に答える