使用Javascript添加文本字段但值继续擦除

时间:2012-04-26 22:35:19

标签: javascript jquery html html5

我创建了一个表单,如下所示

<label>Search:</label>
        <form name="findrecipe" action="#">

            <input type="radio" name="search" id="search_name" value="name" checked>Name
            <input type="radio" name="search" id="search_ing" value="ingredients">Ingredients<br/>
            <input type="text" name="searchBox" onchange="javascript:addBox(this.value);"/>
            <div id="search">
            </div>
        <input type="submit" value="Submit" />
        </form> 

每次使用java脚本代码

更改字段时,我都会添加一个框
function addBox(formVal){
    var temp = this.value;
    alert(formVal);
    if(document.getElementById("search_ing").checked){
        document.getElementById("search").innerHTML += "<br/><input type='text' name='searchBox' onchange='javascript:addBox();'/>";
        this.value = temp;
    }
}

正如你所看到的,我已经尝试重新输入值,这样它就不会清除前面框中的值,但我肯定有问题。如何添加文本字段而不清除其余字段?

由于

4 个答案:

答案 0 :(得分:1)

尝试将新元素附加到容器而不是附加HTML标记。

$('.container').append($('br')).append($('input'));

jQuery文档:http://api.jquery.com/append/

答案 1 :(得分:0)

看起来你传递的是表单值,但是除了alert()之外它忽略了它。

更改

var temp = this.value;

var temp = formVal;

并更改

this.value = temp;

document.getElementById("search").value = temp;

答案 2 :(得分:0)

虽然你没有使用任何jQuery,但你已经标记了jQuery的问题,所以我冒昧地使用jQuery ......

我将html简化为:

<label>Search:</label>
<form name="findrecipe" action="#">
    <input type="radio" name="search" id="search_name" value="name" checked />Name
    <input type="radio" name="search" id="search_ing" value="ingredients" />Ingredients<br/>
    <input class="searchbox" type="text" name="searchBox" />
    <br/>
    <input type="submit" value="Submit" />
</form> ​

使用以下javascript:

$(function() {
    $('form').on('change', '.searchbox', function() {
       $('form').append('<br/><input class="searchbox" type="text" name="searchBox" />');
    });
});​

每当有人更改现有输入的值时,jQuery就会添加一个新输入,但不会更改现有输入,因此会保留所有现有值。

有一个演示here

答案 3 :(得分:0)

您的部分问题是您没有像您认为的那样设置输入值。

的例子中
this.value = temp;

“this”指的是DOMWindow,而不是输入,所以你试图设置窗口的值,而不是输入。

我的解决方案(快速HTML注入黑客方式)将是

的内容
function addBox(formVal){
    var temp = formVal;
    //alert(formVal);
    if(document.getElementById("search_ing").checked){

        document.getElementById("search").innerHTML += "<br/><input type='text' name='searchBox' onchange='addBox(this.value);' value='"+formVal+"'/>";
        //this.value = temp;
    }
}

如果我有更多的时间,我会使用一些更优雅的东西(这是没有经过测试的,所以它不会开箱即用)

var newINput = document.createElement("input");
newINput.type='text';
newINput.value= "";
newInput.name= some unique name ;

document.getElementById('search').appendChild(newINput);