代码之家  ›  专栏  ›  技术社区  ›  Anders

元素未定义jQuery$(Element).remove()

  •  2
  • Anders  · 技术社区  · 17 年前

    var fieldCount = 0;
    function addField() {
        var name = 'file' + fieldCount;
        var row = 'row' + fieldCount;
        var str = '<p id="' + row + '"><label for="' + name + '">File to upload: <input type="file" name="' + name + '" id="' + name + '" />(100MB max size) <a onclick="removeRow(' + row + '); return false;">[-]</a></label></p>';
        fieldCount++;
        $("#fields").append(str);
    };
    function removeRow(id) {
        $(id).remove();
    };
    

    <form id="ajaxUploadForm" action="<%= Url.Action("AjaxUpload", "Upload")%>" method="post" enctype="multipart/form-data">
        <fieldset id="uploadFields">
            <legend>Upload a file</legend>
            <div id="fields"></div>
            <input id="ajaxUploadButton" type="submit" value="Submit" />            
        </fieldset>
        <a onclick="addField(); return false;" id="add">Add</a>
        <div id="resultBox">
            <p id="status" style="margin:10px;"></p>
        </div>
    </form>
    

    这 addFields row# 未定义,其中 #

    3 回复  |  直到 5 年前
        1
  •  4
  •   Gumbo    17 年前

    # ID ),要么在 removeRow call(另请注意ID选择器周围的引号):

    '<a onclick="removeRow(\'#' + row + '\'); return false;">'
    

    或者在 removeRow 功能本身:

    function removeRow(id) {
        $("#" + id).remove();
    };
    
        2
  •  2
  •   Greg    17 年前

    您还需要使用“#”将其设置为选择器:

    var str = '... <a onclick="removeRow(\'#' + row + '\'); return false;">...';
    

    更好的方法是将onclick赋值为函数(不确定jQuery的方式,但可以用纯Javascript实现):

    var a = document.createElement('a');
    a.onclick = (function(row)
    {
        return function()
        {
            removeRow(row);
            return false;
        };
    })();
    
        3
  •  2
  •   cgp    17 年前

    您正在传入的字符串值为 row12

    $('#'+row).remove()
    

    这 # 指定您正在寻找 ID 。我同意我认为其他答案之一即将说的话,你应该使用 onclick 自然事件 this 关键字改为:

    <p onclick="remove(this)">something</p>
    
    function remove(what) {
      $(what).remove()
    }
    

    或者,也许干脆把整件事都忘了,转而处理这类行:

    $('.removableRow').live('click', function() {$(this).remove()});
    

    然后,您只需指定该行是可移动的,根本不必担心绑定事件:

    <p><a class="removableRow" href="#">Remove</a></p>