如何在javascript的下一行调用相同的id

时间:2017-03-15 20:29:00

标签: javascript html

我有选择,我在哪里选择一些值并在输入框中得到结果但问题是此代码仅在第一行工作。我的第二行选择工作但结果不起作用。这里的任何想法都是整个代码。

    <!DOCTYPE html>
<head>

    <script type="text/javascript">
      function displayResult()
    {
        document.getElementById("mycall1").insertRow(-1).innerHTML = '<td><select id = "forcx" onchange="fillgap()"><option>Select</option> <option>Force</option><option>Angle</option><option>Area</option></select></td>';
        document.getElementById("mycall2").insertRow(-1).innerHTML = '<td><input type="text" id="result1" size = "10" ></td>';

        }

        function fillgap(event){
         var xnumb = 20;  
         var forcxlist = document.getElementById("forcx");
         var forcxlistValue = forcxlist.options[forcxlist.selectedIndex].text;  
             if (forcxlistValue == "Force"){
              document.getElementById("result1").value = xnumb;    
     }
     }
        </script>

    <style>
       table,
td,
th {
    border: 1px solid black;
    white-space: nowrap;

}

table {
    border-collapse: collapse;
    width: 30%;
    table-layout: auto;

}

td {
    text-align: center;
    vertical-align: center;
}
</style>
<body>
   <table>
   <tr>
    <th>To</th>
    <th>From</th>
    <th>Detail</th>
    <th>Selection</th>
    <th>Result</th>
    <th>Add</th>

   </tr>
     <tr>
      <td>A</td>
      <td>B</td>
      <td>A+B</td>
         <td>
            <table id ="mycall1" border= "1">
              <td></td>
            </table>
         </td>
          <td>
            <table id ="mycall2" border= "1">
              <td></td>
            </table>
         </td>
      <td><button type="button" onclick="displayResult()">+</button></td>

     </tr>

   </table> 
</body>

2 个答案:

答案 0 :(得分:1)

使用提供的有限代码很难回答,但我认为您的问题是您多次使用id。这是无效的。 // highlight row by child selectors (:last-child) $('#selectLastRowBtn').click(function(){ //clear any previous highlighting $('#myTable tr:not(:first-child)').css('background-color','white'); // highlight the last row in the table. $('#myTable tr:last-child').css('background-color','lightgrey'); }); // highlight row using a specific unique id $('#selectRowByIdBtn').click(function(){ //get selected row id from dropdown var rowId = $('#rowSelector option:selected').val(); //clear any previous highlighting $('#myTable tr:not(:first-child)').css('background-color','white'); //highlight the row with the matching id from the selection dropdown $('#myTable #row_'+rowId).css('background-color','lightgrey'); }); // // ------Below is just stuff to make demo work, not relevant to the question // // Add row with unique id $('#addNewRowBtn').click(function(){ var rowCount = $('#myTable tr').length; $('#myTable').append('<tr id="row_'+rowCount+'"><td>23124</td><td>23124</td><td>23124</td><td>23124</td></tr>'); populateSelect(rowCount); }); // populate select options function populateSelect(rowCount){ $('#rowSelector').append('<option value="'+rowCount+'">'+rowCount+'</option>') }应该是唯一的,只能使用一次。

我已经在这里整理了一些示例代码,希望对您有所帮助。它没有解决你的确切问题(我没有你的HTML,所以我无法完全解决它)。但希望这会让您了解如何处理访问不同的行或特定的唯一ID。

我在这里使用jQuery是为了简单,但原理是一样的:

如果这更容易玩,这是一个小提琴:https://jsfiddle.net/BradChelly/4179e26q/

我希望这会有所帮助。

table {
  width: 100%;
  text-align: center;
}

table td {
  border: 1px solid #333;
  padding: 30px 0px;
}

table tr:first-child {
  top: 0px;
  background: #333;
}

table tr:first-child th {
  color: #fff;
  padding: 20px 0px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<table id="myTable">
  <tr>
    <th>Column One</th>
    <th>Column Two</th>
    <th>Column Three</th>
    <th>Column Four</th>
  </tr>
  <tr id="row_1">
    <td>23124</td>
    <td>23124</td>
    <td>23124</td>
    <td>23124</td>
  </tr>
</table>

<button id="addNewRowBtn">Add Row</button>
<h3>Using child selectors:</h3>
<button id="selectLastRowBtn">Highlight last row using child selector</button>

<h3>Highlight a row by id:</h3>

<select name="" id="rowSelector">
  <option value="1">1</option>
</select>
<button id="selectRowByIdBtn">Highlight row by selected id</button>
{{1}}

答案 1 :(得分:1)

好的,如果我理解正确的话

1)您想要添加:selectionresults&amp; +到现有表格

2)添加选项ForceAngle&amp; Area

select

3)如果选择了Force,则输入值&#39; 20&#39;在结果td

4)单击+时,会添加一个新行。

5新添加的行应该完全相同。

鉴于上述情况,我做了以下工作,我使用jQuery更简单,我更熟悉它。很容易。

这里的诀窍是事件委托。在您的网页加载新行不存在的时候,这就是为什么您的JavaScript没有处理它们的原因。你可以在这里阅读:https://learn.jquery.com/events/event-delegation/

结果如下:

&#13;
&#13;
$(document).ready(function() {
  // add headers to table
  $('table tr:first-child').append('<th>Result</th><th>Add</th>');
  //add fields to table
  $('table tr:not(:first-child)').append('<td><select class="selection"><option></option><option value="Force">Force</option><option value="Angle">Angle</option><option value="Area">Area</option></select></td><td class="result"></td><td><button type="button" class="displayResultBtn">+</button></td>');
  
  // add new row when button is clicked
  $('table').on('click','.displayResultBtn', function( event) {
    var tRow = $(this).parent().parent().clone();
    $(this).parents('table').append(tRow);
    $('table tr:last-child td.result').empty();
    
  });

  // when the dropdown is changed, update the result to 20 if "Force" is selected.
  $('table').on('change','.selection', function( event) {
    var selection = $(this).val();
    if (selection == "Force") {
      $(this).parent().next().html('20');
      // You can add more coditionals if you want to add didferent values for the other options.
    } else {
    	$(this).parent().next().empty();
    }
    
  });
});
&#13;
table,
td,
th {
  border: 1px solid black;
  white-space: nowrap;
}

table {
  border-collapse: collapse;
  width: 30%;
  table-layout: auto;
}

td {
  text-align: center;
  vertical-align: center;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<table>
  <tr>
    <th>To</th>
    <th>From</th>
    <th>Detail</th>
    <th>Selection</th>

  </tr>
  <tr>
    <td>A</td>
    <td>B</td>
    <td>A+B</td>
  </tr>
</table>
&#13;
&#13;
&#13;