无法获得当前行中第一个TD的值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法获得当前行中第一个TD的值相关的知识,希望对你有一定的参考价值。
我的要求是在每个表行中有3个复选框,一旦选中该复选框,它将创建一个隐藏的输入,其值对应于该特定行的第一个<td>
。
这是一个示例行:
<tr>
<td>user1</td>
<td>768.51</td>
<td>4,680</td>
<td>0</td>
<td>0%</td>
<td>0</td>
<td><input type="checkbox" name=">1 year and <=2 years[]" onclick="createUserNameInput()"></td>
<td>0.00</td>
<td>0.00%</td>
<td>1</td>
<td><input type="checkbox" name=">2 years and <=3 years[]" onclick="createUserNameInput()"></td>
<td>768.51</td>
<td>100.00%</td>
<td>4,677</td>
<td><input type="checkbox" name="> 3 years[]" onclick="createUserNameInput()"></td>
</tr>
检查3个复选框中的任何一个后,应创建此隐藏输入。如果选中3,则应创建3个输入。这些输入的<value>
应该等于此行中第一个<td>
的值,即user1
。这是我试图实现它的方式(代码不一致,但我只需要先让它工作):
<script>
function createUserNameInput()
// var input = document.createElement("input");
// input.setAttribute("type", "hidden");
// input.setAttribute("name", "user");
// input.setAttribute("value", $(this).parent().siblings(":first").text()); // VALUE IS EMPTY
// document.getElementById("main-form").appendChild(input);
alert($(this).parent().siblings(":first").text()); // VALUE IS EMPTY
</script>
我已经引用了之前的帖子,但这些解决方案都不适合我。当我运行alert()
时,值为空 - 没有显示任何内容:
谁可以帮忙?如果没有jQuery可以做到,更令人惊叹!
答案
- 您必须将对象传递给您正在调用的函数:
onclick="createUserNameInput(this)"
- 将DOM对象转换为您检索的jQuery对象。
createUserNameInput(e)
和$(e).parent()...
function createUserNameInput(e)
// var input = document.createElement("input");
// input.setAttribute("type", "hidden");
// input.setAttribute("name", "user");
// input.setAttribute("value", $(this).parent().siblings(":first").text()); // VALUE IS EMPTY
// document.getElementById("main-form").appendChild(input);
alert($(e).parent().siblings(":first").text()); // VALUE IS NOT EMPTY NOW!
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td>user1</td>
<td>768.51</td>
<td>4,680</td>
<td>0</td>
<td>0%</td>
<td>0</td>
<td><input type="checkbox" name=">1 year and <=2 years[]" onclick="createUserNameInput(this)"></td>
<td>0.00</td>
<td>0.00%</td>
<td>1</td>
<td><input type="checkbox" name=">2 years and <=3 years[]" onclick="createUserNameInput(this)"></td>
<td>768.51</td>
<td>100.00%</td>
<td>4,677</td>
<td><input type="checkbox" name="> 3 years[]" onclick="createUserNameInput(this)"></td>
</tr>
</table>
另一答案
问题是,你没有将this
传递给函数。从元素中的函数调用传递this
,以便您可以在函数体内引用它。
function createUserNameInput(el)
var input = document.createElement("input");
input.setAttribute("type", "hidden");
input.setAttribute("name", "user");
input.setAttribute("value", $(el).parent().siblings(":first").text()); // VALUE IS EMPTY
document.getElementById("main-form").appendChild(input);
alert($(el).parent().siblings("td:first").text()); // VALUE IS EMPTY
console.log('Hidden field value:',$('#main-form input[name=user]').val())
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="main-form"></div>
<table>
<tr>
<td>user1</td>
<td>768.51</td>
<td>4,680</td>
<td>0</td>
<td>0%</td>
<td>0</td>
<td><input type="checkbox" name=">1 year and <=2 years[]" onclick="createUserNameInput(this)"></td>
<td>0.00</td>
<td>0.00%</td>
<td>1</td>
<td><input type="checkbox" name=">2 years and <=3 years[]" onclick="createUserNameInput(this)"></td>
<td>768.51</td>
<td>100.00%</td>
<td>4,677</td>
<td><input type="checkbox" name="> 3 years[]" onclick="createUserNameInput(this)"></td>
</tr>
</table>
另一答案
您可以在复选框元素上绑定click事件,例如
$(function()
$('.users').on('click',':checkbox',function()
// var input = document.createElement("input");
// input.setAttribute("type", "hidden");
// input.setAttribute("name", "user");
// input.setAttribute("value", $(this).parent().siblings(":first").text()); // VALUE IS EMPTY
// document.getElementById("main-form").appendChild(input);
var tr = $(this).closest('tr')
console.log(tr.children("td:first").text(),'total checked = '+ tr.find(':checkbox:checked').length); // VALUE IS EMPTY
);
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="users">
<tr>
<td>user1</td>
<td>768.51</td>
<td>4,680</td>
<td>0</td>
<td>0%</td>
<td>0</td>
<td><input type="checkbox" name="1"></td>
<td>0.00</td>
<td>0.00%</td>
<td>1</td>
<td><input type="checkbox" name="2"></td>
<td>768.51</td>
<td>100.00%</td>
<td>4,677</td>
<td><input type="checkbox" name="3"></td>
</tr>
</table>
另一答案
你能直接传递给这样的函数:
<td><input type="checkbox" name=">1 year and <=2 years[]" onclick="createUserNameInput('user1')"></td>
得到这样的:
<script>
function createUserNameInput(value)
console.log(value);
</script>
另一答案
$(this).closest('tr').find("td:first").text();
另一答案
您也可以尝试这种方式,将父节点放到表中并获取第一个子元素
$(e).parentsUntil('table').find('td:first').text()
以上是关于无法获得当前行中第一个TD的值的主要内容,如果未能解决你的问题,请参考以下文章