我遇到的问题是我的textarea值返回一个空字符串。我有一个模式,它在dblclick事件上打开,其中有一个textarea和一个按钮。我希望当单击该按钮时,将获取在textarea中写入的文本并将其存储在变量中以用于其他功能。顺便说一句,当我点击按钮时,返回的文字是""。
textarea html是:
<textarea id="text-comment" placeholder="Insert a new comment" style="min-width:100%"></textarea>
按钮html是:
<button class="btn btn-default" data-dismiss="modal" id="edit">Edit</button>`
功能代码是:
$(document).on('click', '#edit', function(){ //edits the selected note
var classes = $(selectedNote).attr("class").toString().split(' ');
var id = classes[2];
var newText = $("#text-comment").val();
console.log("new text is: "+newText);
$(selectedNote).attr("title", newText);
for(var i = 0; i < temporaryNotes.length; i++) {
if(temporaryNotes[i]["ref"] == id) {
temporaryNotes[i]["text"] = newText;
}
}
for(var i = 0; i < notes.length; i++) {
if(notes[i]["ref"] == id) {
deleteNotes.push(notes[i]);
notes[i]["text"] = newText;
}
}
})
答案 0 :(得分:2)
我相信你的模态内容是在HTML本身内定义的。也许你有<div class="modal-content">
或其他什么 - 我不知道你正在使用什么模式插件(但如果我写了一个,它将专门用<script type="text/html">
来防止这个问题。 。)
以这种方式定义模态的问题在于&#34;模板&#34;内容本身就是文档的一部分,即使&#34; base&#34;一个永远不会显示。然后,模态插件可以在模板上调用cloneNode
并将其渲染为模态。简单,对吧?
不完全。 ID必须在页面上是唯一的,因此使用cloneNode
呈现的任何模态插件最终都会在整个地方出现重复的ID。
要了解是否是这种情况,请尝试在屏幕上显示模态时运行此代码:
alert($("[id='text-comment']").length);
这将显示有多少元素具有该ID(而#text-comment
可能在第一个元素之后停止)。该值应该是1
。如果它是2
(或更糟,更多!)那么你确实有一个糟糕实现的模态插件。
如果不确切知道您正在使用哪个插件以及它是如何工作的,我建议您找一些方法来唯一标识显示的模式而不是模板,并且不要在模板中使用ID。 / p>
您需要使用浏览器的开发人员工具来执行此操作,但作为示例,如果您的模态显示为class="modal-display"
,那么您可以执行以下操作:
var button = $(this),
container = button.closest(".modal-display"),
textarea = container.find("textarea"),
value = textarea.val();
这种&#34;相对搜索&#34;对于元素更加灵活,它将帮助您将来学习这类东西。但就目前而言,它应解决重复ID的问题。