Uncaught TypeError: Cannot read property 'style' of null when using data-SOMETHING attribute to pass parameter to JavaScript function

Uncaught TypeError: Cannot read property 'style' of null when using data-SOMETHING attribute to pass parameter to JavaScript function

我是编码新手,我正在尝试使用 JavaScript 隐藏段落。

这是我的HTML

{% for post in posts %}

    <div class="container p-3 my-3">
        <div class="card">

                    <div class="card-block px-1">

                        <h4 class="card-title">
                            <a href="{% url 'profile' post.user.id %}">{{ post.user }}</a>
                        </h4>

                        <p class="card-text" id="{{ post.id }}">{{ post.content }}</p>

                        <textarea style="display: none;" id="edit-view">{{ post.content }}</textarea>

                        <p class="card-text" id="time">Posted on: {{ post.timestamp }}</p>

                        {% if post.user == request.user %}
                        <button type="button" class="btn btn-primary" id="edit-btn" data-text="{{ post.id }}">Edit</button>
                        {% endif %}

                        <button type="button" class="btn btn-primary" id="save-btn" style="display:none;">Save</button>

                        <p class="card-footer">{{ post.like }} Likes</p>

                    </div>

            
        </div>
    </div>

{% endfor %}

查看源代码,我可以验证 post.id 上下文在数据文本属性和我要隐藏的段落的 ID 中是否正确显示。

这是我的 JavaScript 函数(我在单独的 js 文件中):

function edit(text) {

    // hide content
    document.querySelector(`#${text}`).style.display = 'none';
}

我在加载 DOM 并将事件侦听器应用于 ID 为 edit-btn 的所有按钮后调用函数:

document.addEventListener('DOMContentLoaded', function() {
        
 // Adding event listener
 document.querySelectorAll('#edit-btn').forEach(function(button) {
   button.onclick = function() {
   console.log('Button clicked!')
   edit();
   }
  });
});

然而我得到了上面的错误,好像参数没有被传递给函数?

非常感谢任何帮助。

P.S。隐藏段落只是编辑功能的第一步。然后我应该用文本区域替换它,填充段落的内容,用户可以在其中编辑然后保存他们 post 的内容。不幸的是,我已经在第一步停留了一段时间了。

您必须将 post.id 传递给 edit() 函数,如下所示:

button.onclick = function(event) {
  const editBtn = event.target;
  const postId = editBtn.getAttribute('data-text');
  edit(postId);
}