0

我的页面上有一堆<textarea>元素都具有相同的“名称”属性。我正在尝试捕获当前焦点所在的 textarea 的文本:

$('body').on('click', '[name=btnAddQuestion]', function () {

    questionText = $("[name=stem]").val();
    console.log('questionText: ' + questionText);

});

但我只能让它捕获<textarea>列表中第一个的文本。有没有办法做到这一点,而不必给每个文本框一个唯一的 ID?

谢谢!

这是一个jsfiddle:

http://jsfiddle.net/9b2XA/2/

4

5 回答 5

4

尝试使用:focus选择器。

$("[name=stem]:focus").val();

您实际上可以简单地执行以下操作:

$(document.activeElement).val();

编辑:实际上这不起作用,因为一旦您单击按钮,textarea 就会失去焦点。我写的太快了。

但是,您可以做的是跟踪哪个是最后textarea一个有焦点并在您的点击处理程序中使用它。

var lastFocusedTextArea = null;

$('textarea[name=stem]').focus(function (e) {
    lastFocusedTextArea = e.currentTarget;
});
于 2013-10-24T20:01:35.297 回答
2

一旦你按下按钮,你的 textarea 就会失去焦点,所以 :focus 选择器对你没有好处。

单击按钮后,您可以将焦点设置回最后一个文本区域,然后使用 :focus 选择器拉出文本。

http://jsfiddle.net/9b2XA/3/

在这个小提琴中,我捕获了最后一个聚焦的文本区域,然后在单击按钮时将其聚焦回来。

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);

});
于 2013-10-24T20:10:48.293 回答
1

您可以将最后聚焦的 textareas 文本存储在变量中,然后在单击按钮时执行您需要执行的操作:

$(document).ready(function () {
    var txt = '';
    $('textarea[name="stem"]').blur(function () {
        txt = $(this).text();
    });
    $('input[name="btnAddQuestion"]').click(function () {
        alert(txt);
    });
});
于 2013-10-24T20:45:18.443 回答
1

使用此代码:

$('body').on('click', '[name=btnAddQuestion]', function () {    
  questionText = $("[name=stem]:focus").val();
  console.log('questionText: ' + questionText);    
});

更新:

正如其他人在这里提到的,单击按钮时,您的文本区域会失去焦点,因为按钮现在拥有它,在这种情况下,您必须维护最后一个焦点元素并在单击处理程序函数中使用它:

var lastFocusedTextArea = null;

$('textarea[name=stem]').focus(function (e) {
    lastFocusedTextArea = e.currentTarget;
});

$('body').on('click', '[name=btnAddQuestion]', function () { if(lastFocusedTextArea.is('textarea')){ questionText = lastFocusedTextArea.val(); console.log(' questionText: ' + questionText); } });

于 2013-10-24T20:02:08.223 回答
1

如果要获取每个文本区域的文本,则需要对其进行迭代:

$("[name=stem]").each(function() {
     questionText = $(this).val();  
     console.log('questionText: ' + questionText);
});

如果您想在用户单击按钮时获得对具有焦点的文本的引用,则必须将blur事件处理程序附加到所有文本区域并记录“最后焦点”的文本区域(因为焦点将当用户点击按钮时改变)

于 2013-10-24T20:02:28.490 回答