1

私はちょっと立ち往生しており、解決策を見つけるためにスタックオーバーフローの多くのページを閲覧しました。

入力フィールドを使用して新しい TR を動的に追加できる請求書テーブルがあります。これは正常に機能しますが、最初と 2 番目の入力フィールドでは機能します。

最初のオートコンプリート入力フィールドは、顧客 ID に基づいています。ただし、2 番目のオートコンプリートは、非表示の入力フィールド (ID) に値を追加する最初のオートコンプリートの選択値に基づいています。

2 番目のオートコンプリートは正常に機能しますが、テーブルの前の TD にある最後の非表示の入力フィールドの値を取得する必要があります。

各 TR 行のクラスは class=".item-row" です。2 番目のオートコンプリートは、テーブルの 2 番目の TD にあります。

次のスクリプトを使用しています。

   // Use the .autocomplete() method to compile the list based on input from user
   $(".articleName").autocomplete({
    source: function(request, response) {
    var $itemrow = $(this).closest('tr');
        $.ajax({
            url: "getproducts-test.php",
            dataType: "json",
            data: {
                term: request.term,
                staffid: $itemrow.find('#debiteuren_staffmembers_id').val()
            },
            success: function(data) {
                response(data);
            }
        });
    },
    select: function(event, ui) {
        var $itemrow = $(this).closest('tr');
                // Populate the input fields from the returned values
                $itemrow.find('#articleName').val(ui.item.articleName);
                $itemrow.find('#articleSize').val(ui.item.articleDescription);
                $itemrow.find('#articlePrice').val(ui.item.articlePrice);

                // Give focus to the next input field to recieve input from user
                $('#articleQty').focus();

        return false;
    }
// Format the list menu output of the autocomplete
}).data( "autocomplete" )._renderItem = function( ul, item ) {
    return $( "<li></li>" )
        .data( "item.autocomplete", item )
        .append( "<a>" + item.articleName + " - " + item.articleDescription + "</a>" )
        .appendTo( ul );
};

あなたが見ることができる場所では、返される正しい値を取得するために ID が必要です。これは機能していないものです:

staffid: $itemrow.find('#debiteuren_staffmembers_id').val()

たとえば、これは HTML です。

<tr class="item-row">
<td>
   <textarea name="debiteuren_staffmembers[]" id="debiteuren_staffmembers"></textarea>
   <input type="hidden" name="debiteuren_staffmembers_id[]" id="debiteuren_staffmembers_id" value="2">
</td>
<td>
   <textarea name="articleName[]" id="articleName"></textarea>
</td>
</tr>

たとえば、staffid を取得するようにコードを変更すると、次のようになります。

staffid: $('#debiteuren_staffmembers_id').val()

それは機能しますが、テーブルの最初の行から最初の隠し入力の値のみを取得し、オートコンプリートが使用されている現在の行からの入力が必要です。

誰かが光を当てることができれば幸いです。皆さん、ありがとうございました。

4

1 に答える 1

1

質問と会話から判断して、あなたが使っている

id="debiteuren_staffmembers" //etc...

複数の要素の場合。DOM 内の id 属性の値は一意である必要があるため、マークアップ内の複数の要素またはその他の属性に対してクラスを使用してみてください。値を取得できないのはそのためです。

UPD

$(this)キーワードが$(".articleName")入力フィールドを参照していません。オートコンプリート オブジェクトを参照します。入力フィールドを見つける方法を探す必要があります。

たとえば、次のように使用できます。

$(".articleName").each(function(index, value){
  var $that = $(this);
  $(this).autocomplete({
      source: function(request, response) {
      var $itemrow = $that.closest('tr');
      ....
});

入力オブジェクトへの参照については、使用しているオートコンプリート プラグインのドキュメントを確認してください。

于 2013-06-11T07:47:14.043 に答える