【问题标题】:add an input in a div with javascript使用 javascript 在 div 中添加输入
【发布时间】:2013-05-02 19:57:47
【问题描述】:

我的 html 页面中有这个 div 显示为灯箱:

<div id="container">
    <input type="text" id="user_1" name="user_1" value="user_1"/><br>
    <input type="text" id="user_2" name="user_2" value="user_2"/><br>
    <input type="text" id="user_3" name="user_3" value="user_3"/><br>
    <label onclick="add_input();"><img alt="add_other" src="add.png"></label>
</div>

我希望当我点击图像时,输入将被添加并出现,我尝试使用以下 Js 函数来做到这一点:

function add_input(){
        var div = document.getElementById('container');
        var input = '<input style="width:300px;" type="text" id="user" name="user" value=""/>'
        div.innerHTML+= input;
    }

id="container" 的 div 在其 css 中具有 height : auto 并且在单击添加图像后会出现一个输入,但在灯箱之外。 还有其他方法吗?

【问题讨论】:

    标签: javascript input django-templates


    【解决方案1】:

    您将输入放入容器中,所以这听起来像是一个 CSS 问题。可能是祖先元素限制了高度。

    WRT 你的函数,不要使用.innerHTML += "&lt;input...&gt;"

    这是破坏性的,对输入元素尤其不利。

    改为使用创建方法创建 DOM 元素:

    function add_input(){
        var input = document.createElement("input")
        input.style="width:300px;" 
        input.id = input.name = "user";
        document.getElementById('container').appendChild(input);
    }
    

    或者,如果您完全决定使用 HTML 标记,至少以一种不会破坏和重建现有内容的方式插入它。

    您可以通过.insertAdjacentHTML() 做到这一点

    function add_input(){
        var div = document.getElementById('container');
        var input = '<input style="width:300px;" type="text" id="user" name="user" value=""/>'
        div.insertAdjacentHTML("beforeend", input);
    }
    

    您只需要一个用于旧 Firefox 的 shim。

    【讨论】:

    • 即使 .innerHTML += "&lt;input...&gt;" 可以工作,问题出在 div 容器的上级 div 中,该容器由 js 文件生成,具有固定高度
    • @Drwhite:是的,我知道.innerHTML += ... 似乎有效。我说不要这样做。在大多数情况下,这是一种不好的做法,并且会在以后给您带来问题,尤其是输入元素。
    猜你喜欢
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 2016-02-26
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多