javascript - 使 div 内容持久化

标签 javascript jquery css html

我有一个有趣的问题,如果可能的话,我希望得到一些帮助。

我有以下 HTML 片段:

<div id="main_">
<ul class="unstyled">
    <ui:repeat var="adultPassenger" varStatus="adult" value="#{bean.adultPassengers}">
        <li>
            <div id="adult#{adult.index}" class="hitbox_">
                <div id="passengerTitle">Adult #{passengerDetailsBean.getPassengerCount(adult.index)}</div>
            </div>

            <div class="hide">
                <div id="adult#{adult.index}_form">
                    <div>
                        <div>
                            <div class="pull-left" style="width: 50%;">
                                <div><h:inputText value="#{adultPassenger.firstName}" class="pasFirstName_adult#{adult.index}" label="First Name"></h:inputText></div>
                            </div>
                            <div class="button-container">
                                <h:commandButton value="Continue" styleClass="btn btn-warning btn-large btn-block" onclick="handleDetailsClick('adult#{adult.index}')"></h:commandButton>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </li>
    </ui:repeat>
</ul>
</div>

<div id="secondary_" class="hide">
    <table>
        <tbody>
            <tr>
                <td">
                    <h:commandButton id="secondaryBack" value="Back" styleClass="btn btn-warning">
                    </h:commandButton>
                </td>
                <td class="secondaryTitle">
                    <h3 class="page-title orange-title-big">Passenger Details</h3>
                </td>
            </tr>
        </tbody>
    </table>

    <div id="secondaryContents">

    </div>
</div>

它们都在同一页上,当一个 div 可见时,另一个不可见。事情是。这是我目前正在使用的 JS:

$(".hitbox_").click(function() {
    var round = Math.round;
    var id = $(this).attr("id");

    window.alert(id);

    var f = $("pasFirstName_"+id).get();
    console.log("name " + f.value);

    // set contents of secondary div
    var passengerDetails = $("#" + id + "_form").html();
    $("#secondaryContents").html(passengerDetails);

    $("#main_").toggleClass("hide");
    $("#secondary_").toggleClass("hide");
});

function handleDetailsClick(index) {
    var passengerDetails = $("#" + index + "_form").html();
    $("#secondaryContents").html(passengerDetails);

    $("#main_").toggleClass("hide");
    $("#secondary_").toggleClass("hide");
}

我想要的(并尝试过但未成功): 单击第一个 div 时,它会隐藏,第二个 div 在填充第一个 div 中的隐藏表单后显示。我这样做是为了保留类名等,因为这样的形式可能不止一种。

当点击“继续”时,第二个 div 被隐藏,它的内容传回第一个 div - 我这样做是为了保留在表单中输入的详细信息。

我的问题是细节不持久。当在之前填写表单后再次单击同一个 div 时,它应该是包含之前输入的详细信息的表单。

这是出了问题的地方,因为表单中从来没有详细信息。

有谁知道我可能做错了什么?

最佳答案

问题出在下面几行

var passengerDetails = $("#" + id + "_form").html();

$("#secondaryContents").html(passengerDetails);

在这里,您获取一个 div 的 HTML 并将其添加到另一个。虽然这肯定会在目标 div 中创建相同的 html,但它不会保留任何用户输入的值以及元素上绑定(bind)的任何事件。

相反,您应该获取元素并将其附加到目标

var passengerDetails = $("#" + id + "_form").children();
$("#secondaryContents").append(passengerDetails);

关于javascript - 使 div 内容持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18716385/

相关文章:

javascript - 通过jquery获取元素的文本内容

html - 为什么 mix-blend-mode 不能处理这个 CSS 中的字体/文本?

javascript - 使用 angular 和 bootstrap 创建一个 "responsive number"指令

javascript - Cordova Sqlite 插件插入带有空值的条目

javascript - Angular : block/wait until promise is done

javascript - 卡在意外的容器子节点上 - javascript HTML

javascript - 在图表之间切换

javascript - JS 按类更改 setposition

javascript - 在现有网站中实现无限滚动

javascript - 拖放到表单内部