我的页面上有一堆<textarea>
个元素都具有相同的“name”属性。我正在尝试捕获当前焦点的textarea文本:
$('body').on('click', '[name=btnAddQuestion]', function () {
questionText = $("[name=stem]").val();
console.log('questionText: ' + questionText);
});
但我只能抓住列表中第一个<textarea>
的文本。有没有办法这样做而不必给每个文本框一个唯一的ID?
谢谢!
这是一个jsfiddle:
答案 0 :(得分:4)
尝试使用:focus选择器。
$("[name=stem]:focus").val();
您实际上可以简单地执行以下操作:
$(document.activeElement).val();
编辑:实际上这不起作用,因为一旦你点击按钮,textarea失去焦点。我写得太快了。
但是,您可以做的是跟踪哪个是焦点并在您的点击处理程序中使用它的最后一个textarea
。
var lastFocusedTextArea = null;
$('textarea[name=stem]').focus(function (e) {
lastFocusedTextArea = e.currentTarget;
});
答案 1 :(得分:2)
一旦按下按钮,你的textarea就会失去焦点,所以:焦点选择器对你没有好处。
单击按钮后,您可以将焦点设置回最后一个文本区域,然后使用:焦点选择器来拉动文本。
在这个小提琴中,我捕捉到最后一个聚焦的textarea,然后在点击按钮时将其聚焦。
var lastFocus;
$("textarea").blur(function() {
lastFocus = this;
});
$('body').on('click', '[name=btnAddQuestion]', function () {
if(lastFocus) { lastFocus.focus(); }
questionText = $("[name=stem]:focus").val();
console.log('questionText: ' + questionText);
});
答案 2 :(得分:1)
使用此代码:
$('body').on('click', '[name=btnAddQuestion]', function () {
questionText = $("[name=stem]:focus").val();
console.log('questionText: ' + questionText);
});
<强>更新强>
正如其他人在这里提到的那样,当你点击按钮时,你的文本区域会失去焦点,因为按钮现在有了它,在这种情况下你必须维护最后一个聚焦元素并在你的点击处理函数中使用它/ p>
var lastFocusedTextArea = null;
$('textarea[name=stem]').focus(function (e) {
lastFocusedTextArea = e.currentTarget;
});
$('body')。on('click','[name = btnAddQuestion]',function(){ 如果(lastFocusedTextArea.is( 'textarea的')){ questionText = lastFocusedTextArea.val(); console.log('questionText:'+ questionText); } });
答案 3 :(得分:1)
如果您想获取每个文本区域的文本,您需要迭代它们:
$("[name=stem]").each(function() {
questionText = $(this).val();
console.log('questionText: ' + questionText);
});
如果您希望获得对文本的引用,那么当用户单击该按钮时,该文本具有焦点,您必须将blur
事件处理程序附加到所有文本区域并记录“最后”的文本区域聚焦“(因为当用户点击按钮时焦点会改变)
答案 4 :(得分:1)
您可以将最后一个聚焦的textareas文本存储在变量中,然后在单击按钮时执行您需要执行的操作:
$(document).ready(function () {
var txt = '';
$('textarea[name="stem"]').blur(function () {
txt = $(this).text();
});
$('input[name="btnAddQuestion"]').click(function () {
alert(txt);
});
});