亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何阻止超標覆蓋我的輸入?珀麗爾

如何阻止超標覆蓋我的輸入?珀麗爾

炎炎設計 2022-12-18 16:05:10
我的問題出在我制作的申請表中,需要填寫大量輸入。我正在使用 Hyperscript 生成 HTML,我遇到了一個問題,當我在頁面中生成更多元素時,我丟失了來自輸入的信息,但只有在我刪除位于輸入之前的一些 HTML 并更新網絡時才會出現這種情況。在示例中,我遇到了原始類型的問題,我在用戶提供信息的輸入之前生成了警告(說要填寫信息),但是一旦再次生成 HTML 而沒有警告,輸入也會丟失。您知道如何在不移動警告的情況下保留輸入并生成新的 HTML 嗎?您可以通過查看示例更好地理解問題 - 您按照警告建議填寫輸入,然后單擊以生成其他 HTML,但它會刪除輸入,您必須再次填寫。<!DOCTYPE html><html dir="ltr">  <head>    <meta charset="utf-8">    <title></title>    <meta name="viewport" content="width=device-width, initial-scale=1">  </head>  <body>    <div id="app">    </div>        <!-- Peryl import -->    <script src="https://unpkg.com/[email protected]/incremental-dom/dist/umd/incremental-dom.js"></script>    <script src="https://unpkg.com/[email protected]/dist/umd/hsml-h.js"></script>    <script src="https://unpkg.com/[email protected]/dist/umd/hsml-app.js"></script>    <!-- end Peryl import -->    <script>        const state = {            warning: "Please fill Temperature parameter",            showDiv: false        }        function getWarning() {            if (state.warning !== "") {                return h("div#warning", {style:"color: red;"}, state.warning);            }        }        function getDiv() {            if (state.div) {                return h("div", "The div is visible but input is gone");            }        }        function view() {            return [                getWarning(),                h("label", "Temperature"),                h("input", {type:"text"}),                h("button", {                    on:["click", "showDiv"]                }, "showDiv"),                getDiv()            ];        }        function dispatcher(app, action) {            if (action.type === "showDiv") {            state.warning = "";   // warning get's cleaned when it's filled            state.div = !state.div;            }            app.update();         }        new HApp(state, view, dispatcher)            .mount(document.getElementById("app"));    </script>  </body></html>
查看完整描述

1 回答

?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

所描述的問題是通過 HSML 下的增量 dom 引擎渲染 DOM 節點給出的。

這與渲染列表(例如 React 中的虛擬 dom)中的問題類似,其中最好的做法是通過標記列表節點key來幫助渲染引擎管理節點重新排序。

div#app示例中的節點下有一個 DOM 節點列表。列表節點之一是輸入元素。IDOM 引擎無法識別節點重新排序,因此引擎會在您打亂元素時呈現所有新節點并丟棄舊節點。因此輸入及其值被刪除并替換為包含空值的新輸入。

要解決問題,您必須使用_key屬性標記輸入元素以幫助渲染引擎在節點隨機播放期間識別節點,如下所示:

h("input", { _key: "some-input-key", type: "text" }).


查看完整回答
反對 回復 2022-12-18
  • 1 回答
  • 0 關注
  • 91 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號