javascript - 为什么动态删除多个输入文本不起作用?

标签 javascript jquery html

我的html是这样的:

<h2><a href="#" id="addScnt">Add Another Input Box</a></h2>

<div id="p_scents">
    <p>
        <label for="p_scnts"><input type="text" id="p_scnt" size="20" name="p_scnt" value="" placeholder="Input Value" /></label>
    </p>
</div>

我的 JavaScript 是这样的:

$(function() {
        var scntDiv = $('#p_scents');
        var i = $('#p_scents p').length + 1;

        $('#addScnt').on('click', function() {
                $('<p><label for="p_scnts"><input type="text" id="p_scnt" size="20" name="p_scnt_' + i +'" value="" placeholder="Input Value" /></label> <a href="#" id="remScnt">Remove</a></p>').appendTo(scntDiv);
                i++;
                return false;
        });

        $('#remScnt').on('click', function() { 
                if( i > 2 ) {
                        $(this).parents('p').remove();
                        i--;
                }
                return false;
        });
});

我的演示和完整脚本如下:http://jsfiddle.net/4nvc0jmb/

如果我单击“添加输入文本”,则它可以工作,但如果我单击“删除输入文本”,则它不起作用。我检查控制台,但没有错误

如何解决这个问题?

最佳答案

Element-ids 应该是唯一的,因此最好使用类或其他属性来标识您的元素(如果有多个)。

您还需要在文档中已有的对象上注册 event-lsitener。并使用您想要使用此事件监听器的对象类型来过滤该事件监听器...否则,事件监听器仅适用于注册该事件监听器时存在的对象。

为了让它运行我做了什么改变:

  • 我将按钮 ID 更改为 class。
  • 在文档元素上注册事件监听器,并针对该按钮类进行过滤。

$(function() {

  var scntDiv = $('#p_scents');
  var i = $('#p_scents p').length + 1;
        
  $('#addScnt').on('click', function() {
    $('<p><label for="p_scnts"><input type="text" id="p_scnt" size="20" name="p_scnt_' + i +'" value="" placeholder="Input Value" /></label> <a href="#" class="remScnt">Remove</a></p>').appendTo(scntDiv);
    i++;
    return false;
  });
        
  $(document).on('click', '.remScnt', function() { 
    if( i > 2 ) {
      $(this).parents('p').remove();
      i--;
    }
    return false;
  });
  
});
* { font-family:Arial; }
h2 { padding:0 0 5px 5px; }
h2 a { color: #224f99; }
a { color:#999; text-decoration: none; }
a:hover { color:#802727; }
p { padding:0 0 5px 0; }

input { padding:5px; border:1px solid #999; border-radius:4px; -moz-border-radius:4px; -web-kit-border-radius:4px; -khtml-border-radius:4px; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<h2><a href="#" id="addScnt">Add Another Input Box</a></h2>
<div id="p_scents">
  <p>
    <label for="p_scnts"><input type="text" id="p_scnt" size="20" name="p_scnt" value="" placeholder="Input Value" /></label>
  </p>
</div>

关于javascript - 为什么动态删除多个输入文本不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56312816/

相关文章:

php - SuiteCRM,在约会下的日历中,相关区域的线索不可点击

javascript - 如何解决未捕获的类型错误: Illegal invocation jquery ajax

javascript - Heroku React App 显示数据库的 json 而不是 UI?

javascript - $ ("body").scrollTop() 在 safari 中不会更新

javascript - 如何在 Reactjs 中从另一个组件触发状态

javascript - 如果用户存在,请使用数据库表中的数据填写表单文本框?

jquery - XMLHTTPRequest 无法加载 http ://. .. Access-Control-Allow-Origin 不允许来源 http://localhost:port

javascript - 输入 input/contenteditable 时匹配特定单词

html - 无论我做什么,页脚都会随着文本滚动

html - CSS 宽度/高度与 HTML 宽度/高度属性具有不同的效果,具体取决于元素类型