【问题标题】:Get data from table row to Javascript从表行获取数据到 Javascript
【发布时间】:2016-05-03 12:40:15
【问题描述】:

我有桌子。共有三列:名称、价格和“下单”按钮。我必须从每一行获取数据到我的 Javascript。每个输入都有 id,例如 productName 和 productPrice 。 表格代码:

<table border="2px">
<tr>
<th>Name</th>
<th>Price</th>
</tr>
<c:forEach items="${productList}" var="product" varStatus="status">
<tr>
    <form>
    <td> ${product.getProductName()}</td>
    <input type="hidden" id="productName" name="productName" value=${product.getProductName()}>
    <td>${product.getPrice()}</td>
    <input type="hidden" id="productPrice" name="productPrice" value=${product.getPrice()}>
    <td><input type="submit" onclick="makeOrder()" value="Make Order"></td>
    </form>
</tr>
  </c:forEach>
  </table>

还有我的 js:

<script type="text/javascript">
function makeOrder() {
    var n=document.getElementById("productName").value;
    var p=document.getElementById("productPrice").value;
    alert("n="+n);
    alert("p="+p);
    //var win=window.open("/user/makeOrder?productName=" + n + "&productPrice=" + p);
}

但是当我点击我的按钮时,我总是提醒我表格的第一行。 我怎样才能提醒其他行?

【问题讨论】:

  • 但是按钮提交后我的页面超载和地址字符串更改正确。所以这意味着更改的数据不会传递给我的js

标签: javascript html function jsp html-table


【解决方案1】:

为每一行使用一个唯一的行 id 并使用 makeOrder() 函数传递该 id,然后在该行中查找其 id 在函数中传递的子元素...

这是工作示例....

function makeOrder(rowId) 
{
	var n=document.getElementById(rowId).childNodes[5].value;
    var p=document.getElementById(rowId).childNodes[9].value;
    alert("n="+n);
    alert("p="+p);
    //var win=window.open("/user/makeOrder?productName=" + n + "&productPrice=" + p);
}
<table border="2px">
	<tr>
	<th>Name</th>
	<th>Price</th>
	</tr>
	<tr id="row1">
		<form>
		<td>P1</td>
		<input type="hidden" id="productName" name="productName" value="P1">
		<td>$5</td>
		<input type="hidden" id="productPrice" name="productPrice" value="5">
		<td><input type="button" onclick="makeOrder('row1')" value="Make Order"></td>
		</form>
	</tr>
	<tr id="row2">
		<form>
		<td>P2</td>
		<input type="hidden" id="productName" name="productName" value="P2">
		<td>$6</td>
		<input type="hidden" id="productPrice" name="productPrice" value="6">
		<td><input type="button" onclick="makeOrder('row2')" value="Make Order"></td>
		</form>
	</tr>
</table>

【讨论】:

  • 是的,它有效。但我不知道我的表中有多少行。我试试这个:&lt;tr id=${product.getProductName()}&gt;&lt;td&gt;&lt;input type="button" onclick="makeOrder(document.getElementById('productName').value)" value="Make Order"&gt;&lt;/td&gt; 但我得到了相同的结果 - 只有第一行得到
  • 在两个地方都使用相同的... for tr &lt;tr id=${product.getProductName()} &gt; for button &lt;input type="button" onclick="makeOrder(${product.getProductName()})" value="Make Order"&gt;
  • 我收到错误:未捕获的类型错误:无法读取 null 的属性“childNodes”
  • 检查您的 html 并查看每个按钮的 makeOrder() 中是否印有 id ??
  • 在单个 qoutes 之间打印 ${product.getProductName()} 像这样 makeOrder('PRODUCT_NANE');
【解决方案2】:

您可以调用一个函数,该函数提供名称为 productName 的所有输入,见下文。

var n=document.getElementsByName("productName").value;
var p=document.getElementsByName("productPrice").value;
for(var i = 0; i < n.length; i++) {
    alert("row 1: " + n[i].value + p[i].value);
}

这应该返回您的所有行。每个警报将显示 1 行的数据。

【讨论】:

  • 不,我不需要返回所有行。单击按钮时,我只需要返回行。
  • 啊,看看这个答案,这样你会得到被点击的按钮,从那里你应该能够使用兄弟姐妹访问你想要的数据。 stackoverflow.com/a/9012576/6270761
猜你喜欢
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多