使用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 -->
        <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>

一旦将输入输入到最后一行,便有一个更新行的功能。这是该功能:

$(document).on('input', 'input.tr_clone_add', function() {


    if(document.getElementById("dynamictable").tBodies[0].rows.length ==    
            (this.parentNode.parentNode.rowIndex + 1)) {                        
                var $tr    = $(this).closest('.tr_clone');
                var $clone = $tr.clone();
                $clone.find(':text').val('');
                $tr.after($clone);
        }                                                                       
    });

然后这是我想做的功能。我不想获取表的最后一个输入值并将其存储在变量中。虽然它现在只是返回一堆胡言乱语,但我不知道为什么要为我的生活。

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

你已经很亲密了。工作中的JSFiddle

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

alert($("#dynamictable tr:last").prev().find("input:last").val());

使用td选择器来选择表格单元格,但这实际上是您要输入的内容。并使用.html()会为您提供表单元格的实际文字HTML内容,而您真正想要的是输入值-您从中获得该值.val()

编辑-一些建议:

您的代码将jQuery与原始Javascript混合在一起。从技术上讲,这没有什么错,但是很难阅读和使用。如果您有可用的jQuery,则最好使用它。

这个简单的JS:

document.getElementById("dynamictable").rows.length

可以用jQuery编写为:

$('#dynamictable tr').length

jQuery选择器匹配所有行,.length并将告诉我们我们有多少个匹配项。

这个简单的JS:

this.parentNode.parentNode.rowIndex

有点棘手,但此jQuery可以工作:

$(this).closest('tr').index()

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

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

if ($(this).closest('tr').is($("#dynamictable tr:last"))) {

这只是检查输入的行是否实际上等于表中的最后一行。这可能比其他版本更具可读性和可理解性。

接下来,将Java内联Java语言(如onClick()处理程序)包括在内是一种不好的做法更好的方法是将它们分开,并在JS中添加事件处理程序,例如:

$('form').on('submit', playland);

还要注意,当您使用JS处理表单提交时,您(可能是?)不希望发生标准的HTML表单提交。要停止此操作,您需要使用event自动传递给任何事件处理程序参数,并停止它-您可以使用以下方法:

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

这是更新的JSFiddle,其中包含所有这些更改。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章