javascript - 为什么 javascript 函数在第一次运行时不更新 DOM

标签 javascript jquery forms dynamic

我有一个动态表单,用户可以通过单击按钮添加输入。这很好用。但是,当单击以删除输入时,第一次单击不会删除输入。之后的每次点击都会按预期删除输入。我可以看到它在第一次单击删除时运行该函数,但 DOM 中没有任何更新,因此该字段保留。这是我的 HTML:

<button onclick="AddFileField()">Add File</button>
<br />
<br />
<form action="" method="post" enctype="multipart/form-data">
    <div id="fileFields"></div>
    <br />
    <input type="submit" value="Upload" />
</form>

以及相关的 JavaScript:

function removeField() {
    $('.removeclass').click(function () {
        $(this).parent().remove();
    });
    return false;
}

var FieldCount = 1; //to keep track of text box added
function AddFileField() {
    var MaxInputs = 10; //maximum input boxes allowed
    var InputsWrapper = $("#fileFields"); //Input boxes wrapper ID
    var x = $("#fileFields > div").length + 1; //current text box count

    if (x <= MaxInputs) //max input box allowed
    {
        $(InputsWrapper).append('<div class="fileInp"><label for="file' + FieldCount + '">File:</label><input type="file" name="files" class="inpinl" id="file' + FieldCount + '" /><a href="#" class="removeclass" onclick="removeField()">&times;</a></div>');
        FieldCount++;
    }
    return false;
}

一个fiddle显示问题。要复制,请添加几个字段,然后单击 x。第一次单击不执行任何操作,然后继续单击将删除字段。我怎样才能获得第一次点击来删除该字段?

最佳答案

这是因为您正在另一个事件处理程序内注册您的事件处理程序。

http://jsfiddle.net/3e1ajtvo/11/

我删除了您的事件处理程序,现在,您将单击的元素作为 elem 传递到函数本身。

事实上,只要公开 jquery(在您的情况下),您甚至不需要该函数。

http://jsfiddle.net/3e1ajtvo/12/

关于javascript - 为什么 javascript 函数在第一次运行时不更新 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25507943/

相关文章:

javascript - jqGrid:未捕获类型错误:无法读取未定义的属性 'template'

javascript - 替换提示并阻止选择

javascript - Spring,Thymeleaf - 更改颜色文本

javascript - 三、二十面体几何没有顶点数组

javascript:如何使用函数式编程比较两个对象数组?

jquery - 如何使用 TypeScript 和 jquery.d.ts 创建通用(无效)JQueryDeferred 对象

forms - 基础中表格的某些字段显示

javascript - React 表单如何根据打开/关闭切换来获取用户数据

javascript - 动态添加的表单字段不会发布到服务器

javascript - 在具有悬停效果的图像上填充与没有悬停效果 css 的相同图像不匹配