【问题标题】:How to change jsp loop element with jQuery ajax?如何使用 jQuery ajax 更改 jsp 循环元素?
【发布时间】:2015-08-16 05:43:29
【问题描述】:

我收到来自 servlet 的提要列表,如下所示:

<c:forEach items="${feedList}" var="feed">
    <tr>
        <td><input readonly="readonly" id="feedId"
            value="<c:out value="${feed.id}" />" /></td>
        <td id="feed-name"><c:out value="${feed.name}" /></td>
        <td><a
            href="FeedController?action=delete&id=<c:out value="${feed.id}"/>">Delete</a>
        </td>
        <td><a
            href="FeedItemController?action=feedItemListAsc&id=<c:out value="${feed.id}"/>">View</a></td>
        <td><button onclick="openEditDialog('${feed.id}', '${feed.name}' )" >Edit</button>
        </td>
    </tr>
</c:forEach>

编辑按钮打开模式窗口并使用 servlet 更改数据库中的记录名称,并在页面重命名后显示新名称:

$('#renameFeed').click(
        function() {
            var name = $('#feedName').val();
            var id = $('#feedId').val();
            var action = 'edit';

            var data = "feedName=" + name + "&id=" + id
                    + "&action=" + action;

            $.ajax({
                type : "Get",
                url : "FeedController",
                data : data,
            }).done(function() {
            $('#feed-name').text(name);
        });
             $('#mask, .window').hide();
        });

它工作正常,但是当您在 jsp 循环中更改不同提要的名称时,$('#feed-name').text(name);每次都会显示循环中第一个提要的更改名称。 可能需要将varStatus="count" 添加到jsp 循环并将名称更改为${count.index}? 什么是最好的解决方案?

【问题讨论】:

    标签: java jquery jsp servlets foreach


    【解决方案1】:

    由于您用来识别单元格的id 选择器,它正在更改第一个找到的元素。 有多种方法可以做到这一点,我将给出一些示例,您可以选择更接近您的整体架构/约定的方法。

    您可以为您的单元格添加标识符

    &lt;td class="feed-name" id='&lt;c:out value="${feed.id}" /&gt;' &gt;&lt;c:out value="${feed.name}" /&gt;&lt;/td&gt;&lt;!-- use default id attribute --&gt;

    &lt;td id="feed-name" feed-id='${feed.id}' &gt;&lt;c:out value="${feed.name}" /&gt;&lt;/td&gt; &lt;!-- use custom attribute (not so good since you will not be using 'id' as it should be)--&gt;

    您可以通过以下方式识别您的手机:

    $('.feed-name[feed-id="'+ id +'"]').text(name)

    $('#feed-name[feed-id="'+ id +'"]').text(name)

    分别。

    如果我必须这样做,我会再重构一点。

    • 我会在行中添加一个标识符&lt;tr id='&lt;c:out value="${feed.id}" /&gt;'&gt;
    • 在您的示例中,我将 id 更改为类 &lt;td id="feed-name"&gt;&lt;td class="feed-name"&gt;
    • 我将 jQuery 选择器更改为 $('#'+id).find('.feed-name') 以识别相应的单元格。

    【讨论】:

    • 为什么在$('.feed-name[feed-id="'+ id +'"]').text(name)中使用'+ id +'?以及如何使用$('#'+id).find('.feed-name') 选择器改为 $('.feed-name[id="' + id + '"]').text(name);?当我使用 id="' + id + '"] 而不是 feed-id="'+ id +'" 时,我为我工作
    • 看看api.jquery.com/attribute-equals-selector,了解如何通过属性名称/值使用选择器
    猜你喜欢
    • 2014-01-09
    • 2022-12-05
    • 1970-01-01
    • 2014-07-03
    • 2018-06-05
    • 2021-05-07
    • 2012-01-24
    • 2011-07-09
    相关资源
    最近更新 更多