使用jQuery查找表的最后一个输入值时遇到问题,我的函数只返回jibberish。如何获取最后一行的输入值?

使用jQuery查找表的最后一个输入值时遇到问题,我的函数只返回jibberish。如何获取最后一行的输入值?,jquery,Jquery,对不起,问了个基本问题。我大约5天前才开始学习Javascript。我有一个HTML表单/表格,如下所示: <body> <form onsubmit="playland()"> <table id="dynamictable"> <!-- Added an id to the table element to easily select it and keep track of the rows --> <t

对不起,问了个基本问题。我大约5天前才开始学习Javascript。我有一个HTML表单/表格,如下所示:

<body>
    <form onsubmit="playland()">
    <table id="dynamictable"> <!-- Added an id to the table element to easily select it and keep track of the rows -->
        <tr>
            <td>Name</td>
            <td>Location</td>
            <td>From</td>
            <td>To</td>
        </tr>

        <tr class="tr_clone">
            <td>
                <input type="text" autofocus placeholder="who" name="add" class="tr_clone_add" >
            </td>
            <td>
                <input type="text" autofocus placeholder="location" name="location" >
            </td>
            <td>
                <input type="text" placeholder="Start Date" name="datepicker_start" class="datepicker">
            </td>
            <td>
                <input type="text" placeholder="End Date" name="datepicker_end" class="datepicker">
            </td>
        </tr>
    </table>

    <button  action="submit">Click me</button>
    </form>
</body>
这是我要做的函数。我不想获取最后一个表输入值并将其存储在变量中。不过,现在它只是返回了一堆胡言乱语,我不明白为什么会这样

function playland(){
    alert($("#dynamictable tr:last").prev().find("td").html());
}

你已经很接近了

假设嵌套的
$(document).on('input'),…
处理程序只是一个输入错误,下面是如何获得倒数第二个表行中最后一个输入的值(因为最后一行现在是新的空克隆):

使用
td
作为选择器,您选择的是表格单元格,但它实际上是您所追求的输入。使用
.html()
将为您提供表格单元格的实际文本html内容,您真正需要的是输入值,这是通过
.val()
获得的

编辑-一些建议: 您的代码将jQuery与普通Javascript混合在一起。从技术上讲,这并没有错,但它更难阅读和使用。如果您有可用的jQuery,您也可以使用它

这个简单的JS:

document.getElementById("dynamictable").rows.length
this.parentNode.parentNode.rowIndex
可以在jQuery中编写为:

$('#dynamictable tr').length
jQuery选择器匹配所有行,
.length
将告诉我们获得了多少匹配项

这个简单的JS:

document.getElementById("dynamictable").rows.length
this.parentNode.parentNode.rowIndex
这有点诡计多端,但这个jQuery是有效的:

$(this).closest('tr').index()
$(此)
在此上下文中指接收输入的
输入
元素。查找最近的父行,即输入所在的行。并且,在此格式中,将告诉我们该元素在其同级中的位置(从零开始)

为了好玩,您还可以将整个测试编写为:

if ($(this).closest('tr').is($("#dynamictable tr:last"))) {
这只是检查带有输入的行是否实际上等于表中的最后一行。这可能比另一个版本更容易阅读和理解

接下来,将Javascript内联到HTML中被认为是不好的做法,比如
onClick()
处理程序。更好的方法是将它们分开,并在JS中添加事件处理程序,例如:

$('form').on('submit', playland);
还请注意,当您使用JS处理表单提交时,您(可能?)不希望发生标准HTML表单提交。要停止此操作,您需要使用自动传递给任何事件处理程序的
事件
参数,并停止此操作-您可以使用:

function playland(event){
    event.preventDefault();
    // ... rest of your code

包含所有这些更改。

这只是一个输入错误,还是您真的有两套
$(文档)。在('input',..
上,一套嵌套在另一套中?
.html()
提供节点的html内容。您想要
.val()
取而代之,但您需要检索
输入
字段,而不是
td
。因此可能只需
$(“#可动态输入:最后一个子项”)。val()
?很抱歉,这是一个输入错误。我会更改它。谢谢Kmoser,我会尝试一下。多么好的回答!谢谢你!你不仅解决了问题,而且解释得很好。学习堆栈溢出的方法比我在课堂上做的更多