Member 13995210 Ответов: 1

Как создать кнопку, чтобы получить общее количество каждого продукта, имеющего один и тот же идентификатор в таблице данных jquery?


МОЙ HTML-КОД
<html>
<body>
		<div class="container">
		<button value="Total" class="btn btn-primary" id="totalbtn">total of products</button>
			<table id="tabledata" class="display datatble table-hover" cellpadding="0" cellspacing="0" border="0" width="100%">
				<thead id="tablehead">

				    <tr id="trr" class="dropdown active">
				        <th id="first"></th>
				        <th id="second"></th>
				        <th id="third"></th>
				        <th id="fourth"></th>
        				<th id="fivth"></th>
    				</tr>
					<tr>
						<th>ID</th>
						<th>Name</th>
						<th>Stock</th>
						<th>Expiry Date</th>
						<th>Warehouse</th>
					</tr>
				</thead>
				<tbody><td></td></tbody>
				 <tfoot>
             <tr></tr> 
        </tfoot>
			</table>
		</div>
	</body>
</html>






мой сценарий</большой>

$(document).ready(function() {
   var mytable= $('#tabledata').DataTable( {
        "ajax": {
            "url": "http://localhost/index.php",
            "dataSrc": ""
        },
        "columns": [
            { "data": "Id" },
            { "data": "productname" },
            { "data": "stock" },
            { "data": "expiry" },
            { "data": "warehouse" }
        ],

            initComplete: function () {
            this.api().columns([4]).every( function () {
                 var column = this; 
                 var selectwarehouse = $('<select><option value=""/></select>')
                      .appendTo( $('#tabledata .dropdown #fivth ').empty() )
                      .on( 'change', function () {
                           var val = $.fn.dataTable.util.escapeRegex(
                                $(this).val()
                           );
                      column
                           .search( val ? '^'+val+'$' : '', true, false )
                           .draw();
                      } );
                 column.data().unique().sort().each( function ( d, j ) {
                      selectwarehouse.append( '<option value="'+d+'">'+d+'</option>' )
                 } );
            } ); // this.api function
            this.api().columns([3]).every( function () {
                 var column = this; 
                 var selectexp = $('<select><option value=""/></select>')
                      .appendTo( $('#tabledata .dropdown #fourth ').empty() )
                      .on( 'change', function () {
                           var val = $.fn.dataTable.util.escapeRegex(
                                $(this).val()
                           );
                      column
                           .search( val ? '^'+val+'$' : '', true, false )
                           .draw();
                      } );
                 column.data().unique().sort().each( function ( d, j ) {
                      selectexp.append( '<option value="'+d+'">'+d+'</option>' )
                 } );
            } );//this.api func finish

            this.api().columns([2]).every( function () {
                 var column = this; 
                 var selectstock = $('<select><option value=""/></select>')
                      .appendTo( $('#tabledata .dropdown #third ').empty() )
                      .on( 'change', function () {
                           var val = $.fn.dataTable.util.escapeRegex(
                                $(this).val()
                           );
                      column
                           .search( val ? '^'+val+'$' : '', true, false )
                           .draw();
                      } );
                 column.data().unique().sort().each( function ( d, j ) {
                      selectstock.append( '<option value="'+d+'">'+d+'</option>' )
                 } );
            } ); //this.api func finish

            this.api().columns([1]).every( function () {
                 var column = this; 
                 var selectname = $('<select><option value=""/></select>')
                      .appendTo( $('#tabledata .dropdown #second ').empty() )
                      .on( 'change', function () {
                           var val = $.fn.dataTable.util.escapeRegex(
                                $(this).val()
                           );
                      column
                           .search( val ? '^'+val+'$' : '', true, false )

                           .draw();
                      } );
                 column.data().unique().sort().each( function ( d, j ) {
                      selectname.append( '<option value="'+d+'">'+d+'</option>' )
                 } );
            } ); //this.api func finish


            this.api().columns([0]).every( function () {
                 var column = this; 
                 var selectid = $('<select><option value=""/></select>')
                      .appendTo( $('#tabledata .dropdown #first ').empty() )
                      .on( 'change', function () {
                           var val = $.fn.dataTable.util.escapeRegex(
                                $(this).val()
                           );
                      column
                           .search( val ? '^'+val+'$' : '', true, false )
                           .draw();
                      } );
                        column.data().unique().sort().each( function ( d, j ) {
                        selectid.append( '<option value="'+d+'">'+d+'</option>' )
                 } );
            } ); //this.api func finish


        }//initComplete function 
    });//datatable closed 

                $('totalbtn').click(mytable.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
                    var d = this.data();
                    var i = 0;
                    var h= columns([0]).row( i ).data();
                    var stockdata= columns([2]).data();
                    if ( h == h+1 ) {
                        stockdata.sum();
                    }
                    } ));
                // Draw once all updates are done
                mytable.draw();
}); //document


Что я уже пробовал:

я попробовал функцию click, которая написана в конце кода, но она не сработала. пожалуйста, я хочу получить общую сумму продуктов одного и того же идентификатора, когда нажимаю кнопку total над datatable.

ZurdoDev

Вы разместили много кода. Просто разместите соответствующий код и задайте конкретный вопрос. Покажи нам, где ты застрял.

1 Ответов

Рейтинг:
2

lw@zi

Ваш опубликованный пример кода смутил меня, поэтому я сам создал более простую версию. Это даст некоторое представление о том, как действовать дальше. Вот вам JSFiddle этого.[^]


Если у вас есть таблица с двумя столбцами, например:

<html>

  <body>
    <div class="container">
      <table id="tabledata" class="display datatble table-hover" cellpadding="0" cellspacing="0" border="0" width="100%">
        <thead id="tablehead">
          <tr>
            <th>ID</th>
            <th>Count</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>1</td>
            <td>10</td>
          </tr>
          <tr>
            <td>1</td>
            <td>15</td>
          </tr>
          <tr>
            <td>1</td>
            <td>20</td>
          </tr>
          <tr>
            <td>2</td>
            <td>10</td>
          </tr>
        </tbody>
        <tfoot>
          <tr></tr>
        </tfoot>
      </table>
    </div>
    <p id="total">

    </p>
  </body>

</html>


Затем вы можете получить общую сумму, используя этот код jQuery:

var i = 0;
// Loop through all rows
$('#tabledata tbody tr').each(function() {
  // See if first column is have the desired id
  if ($(this).find("td:eq('0')").text() === '1') {
    // Add second column value to total
    i = i + parseInt($(this).find("td:eq('1')").text());
  }
});

$('#total').text(i);


Конечно, ваш сценарий был бы немного сложнее, чем этот. Но я думаю, что это даст некоторое представление о том, как действовать дальше.