javascript
  • html
  • arrays
  • 2015-06-08 3 views 0 likes 
    0
    $(document).ready(function(){ 
         var srno=1; 
         var srnoarray= new Array(); 
         $(".addRow").click(function(){ 
    
          var ToAppend='<tr><td><input type="text" class="form-control" style="width:40px;" name="srno_[]" id="id_srno_'+srno+'" value="'+srno+'" readonly="readonly" /></td>'; 
    
          ToAppend+='<td>'; 
          ToAppend+='<select class="form-control" name="product_name_'+srno+'" id="product_name_'+srno+'" onchange="return onSelectChangeajax(this.value,'+srno+')">'; 
          ToAppend+='<option value="0">Select Product</option>'; 
          ToAppend+='</select>'; 
          ToAppend+='</td>'; 
    
          ToAppend+='<td><input type="text" class="form-control" name="product_prise_'+srno+'" id="product_prise_'+srno+'" placeholder="Purchase Prise" onblur="calAmount('+srno+')" /></td><td><input type="text" class="form-control" name="product_qty_'+srno+'" id="product_qty_'+srno+'" value="1" placeholder="Quantity" onblur="calAmount('+srno+')"/></td><td><input type="text" class="form-control" name="product_amt_'+srno+'" id="product_amt_'+srno+'" placeholder="Amount" onblur="calAmount('+srno+')"/></td><td><img src="dist/img/removerow.png" onclick="deleteRow(this),deleteArrayVal.apply(this,'+srnoarray+');" /></td></tr>'; 
          srnoarray.push(srno); 
          $("#purchaseItems").append(ToAppend); 
    
          console.log(srnoarray); 
          srno++; 
         }); 
    
    }); 
    
    function deleteRow(rwo) 
    { 
        var i=rwo.parentNode.parentNode.rowIndex; 
        document.getElementById("purchaseItems").deleteRow(i); 
    } 
    function deleteArrayVal(val) 
    { 
        console.log(val); 
    
    } 
    

    Выше функции добавляют динамическую строку и удаляют строку в таблице. Я создал массив с именем srnoarray, и я добавил srno в том массиве на каждый tr, добавляемый динамически. deleteRow - это функция удаления tr, , но когда я удаляю tr, я хочу удалить конкретный srno из srnoarray.Передача массива в качестве аргумента в javascript

    <img src="dist/img/removerow.png" onclick="deleteRow(this),deleteArrayVal('+srnoarray+');" /> 
    

    Я попытался прохождения массива в качестве аргумента в функции, но это не используется. как я должен это делать ??

    ответ

    0

    Я вижу, что вы пытаетесь использовать метод здесь: document.getElementById ("purchaseItems"). DeleteRow (i);

    Для этого вам может потребоваться добавить deleteRow в качестве прототипа для работы.

    Но, пожалуйста, уточните, что именно вы хотите удалить из массива.

    Спасибо.

    +0

    см, когда я добавить строку, я добавить srno в массив, который является 1,2,3 ... и т.д. на консоли я получаю [1,2,3] это. это когда я добавляю строку, то, что мне нужно, предположим, я нажал на remove on 2nd tr, который является вторым srno. строка таблицы удаляется, но я также хочу удалить это из массива. вот почему я попытался передать массив как параметр функции и поп в этой функции, но это невозможно. –

    +0

    Вы можете использовать: var idx = srnoarray.indexOf (i); и затем srnoarray.splice (idx, 1); Пожалуйста, дайте мне знать, если это сработает. i Это элемент, который вы хотите удалить из массива. –

    +0

    var idx = srnoarray.indexOf (i); для использования этого я должен передать srnoarray для работы, тогда только я могу использовать этот путь. Проблема в том, что я не могу передать этот массив как параметр функции. –

    0
    function deleteArrayVal(value) { 
        var index = arr.indexOf(value); 
        if (index > -1) { 
         arr.splice(index, 1); 
        } 
    } 
    
    +0

    arr - массив, если вы переходите к функции, он не работает –

    +0

    @Soham s Больше вам не нужно передавать массив, просто передайте значение и определите массив в глобальной области видимости – ozil

    0

    Прежде всего, я бы рекомендовал использовать шаблонизатор (например handlebars) держать JS уборщик (без HTML в JQuery). Улучшает читаемость.

    Я также посмотрел бы на angularjs, потому что тогда вам будет проще синхронизировать данные js с вашим DOM.

    Для кнопки удаления строки вы можете добавить атрибут данных в каждую строку, чтобы вы могли легко получить щелкнув строку в обработчике кликов.

    Пожалуйста, взгляните на демо внизу и здесь, в jsFiddle.

    var row = $("#row-template").html(), 
     
        rowTemplate = Handlebars.compile(row), 
     
        purchasedItems = []; 
     
    
     
    /* 
     
    var context = {srno: 0}; 
     
    var html = rowTemplate(context); 
     
    */ 
     
    function addRow() { 
     
        purchasedItems.push({ 
     
         srno: purchasedItems.length+1, 
     
         products: [ {// just some dummy products 
     
          name:'pizza', 
     
          selected: 'selected' 
     
         }, 
     
         {name:'pasta' 
     
         }, 
     
         {name:'hamburger'} 
     
         ] 
     
        }); 
     
        
     
        console.log(purchasedItems); 
     
        refreshTable(); 
     
    } 
     
    
     
    function refreshTable() { 
     
        $('#purchaseItems').empty(); 
     
        $.each(purchasedItems, function(index, item) { 
     
         $('#purchaseItems').append(rowTemplate(item)); 
     
        }); 
     
    } 
     
    
     
    function getRowId(context) { 
     
        return $(context).parent().parent().attr('data-rowId'); 
     
    } 
     
    
     
    /* not working --> needed to update the data in the array 
     
    $('#purchaseItems').on('change', '.productSelection', function() { 
     
        var index = getRowId(this); 
     
        console.log(index); 
     
        
     
    }); 
     
    */ 
     
    
     
    $('#purchaseItems').on('click', '.removeRow', function() { 
     
        var index = getRowId(this); 
     
        console.log(index); 
     
        purchasedItems.pop(index); 
     
        console.log(purchasedItems); 
     
        refreshTable(); 
     
    }); 
     
    
     
    $('#add').click(function() { 
     
        addRow(); 
     
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/3.0.3/handlebars.js"></script> 
     
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
     
    <script id="row-template" type="text/x-handlebars-template"> 
     
        <tr data-rowId="{{srno}}"> 
     
         <td> 
     
          <input type="text" class="form-control" style="width:40px;" name="srno_[]" id="id_srno_{{srno}}" value="{{srno}}" readonly="readonly" /></td> 
     
        <td> 
     
         <select class="form-control" name="product_name_{{srno}}" id="product_name_{{srno}}" class="productSelection"> 
     
          {{#each products}} 
     
          <option value="{{this.name}}" {{this.selected}}>{{this.name}}</option> 
     
          {{/each}} 
     
          
     
         </select> 
     
        </td> 
     
        <td> 
     
         <input type="text" class="form-control" name="product_prise_{{srno}}" id="product_prise_{{srno}}" placeholder="Purchase Prise" onblur="calAmount({{srno}})" /> 
     
        </td> 
     
        <td> 
     
         <input type="text" class="form-control" name="product_qty_{{srno}}" id="product_qty_{{srno}}" value="1" placeholder="Quantity" onblur="calAmount({{srno}})"/> 
     
        </td> 
     
        <td> 
     
         <input type="text" class="form-control" name="product_amt_{{srno}}" id="product_amt_{{srno}}" placeholder="Amount" onblur="calAmount({{srno}})"/> 
     
        </td> 
     
         <td> 
     
          <!--<img src="dist/img/removerow.png"--> <button class="removeRow">remove</button> 
     
         </td> 
     
        </tr> 
     
    </script> 
     
    
     
    <button id="add">add</button> 
     
    <div id="purchaseItems"></div>

    Смежные вопросы