jQuery Textarea-Fokus

Lesezeit: 3 Minuten

Benutzer-Avatar
Harsha MV

Wenn ich auf eine Schaltfläche klicke, möchte ich die textarea in diesem li Element zu fokussieren.

<li class="commentBlock" id="commentbox-79" style="display: list-item;">
  <div>
    <div class="grid userImageBlockS">
      <div class="imgSmall">
        <img width="35" height="35" alt="image" src="https://stackoverflow.com/bakasura1/files/images/small/1288170363aca595cabb50.jpg">
      </div>
    </div>
    <div class="grid userContentBlockS alpha omega"> 
      <form accept-charset="utf-8" action="/bakasura1/account/saveComment" method="post">
        <div style="display: none;">
          <input type="hidden" value="POST" name="_method">
        </div> 
        <input type="hidden" id="StatusMessageReplyPid" value="79" name="data[StatusMessageReply][pid]"> 
        <input type="hidden" id="StatusMessageReplyItemId" value="1" name="data[StatusMessageReply][item_id]"> 
        <input type="hidden" id="StatusMessageReplyCommentersItemId" value="1" name="data[StatusMessageReply][commenters_item_id]"> 
        <textarea id="StatusMessageReplyMessage" name="data[StatusMessageReply][message]">
          Write your comment...
        </textarea>
        <input type="submit" name="" value="Comment" class="comment" id="comment-79">
      </form> 
    </div>
    <div class="clear"></div>
  </div>
</li>

Das ist mein jQuery Code:

$('.user-status-buttons').click(function() {
    var id = $(this).attr('id');
    $("#commentbox-"+id).slideToggle("fast");
    $("#commentbox-"+id+" #StatusMessageMessage").focus();
    return false;
});

  • Normalerweise möchten Sie 2 nicht kombinieren id Selektoren im selben Ausdruck, ist dies eine schlechte Vorgehensweise ids sollen im gesamten DOM eindeutig sein.

    – Jakob Relkin

    16. November 2010 um 4:36 Uhr

  • @Jacob auf der Schaltfläche habe ich nur die Nummer, aber auf dem li-Element habe ich die Kommentar-ID. sollte das nicht helfen?

    – Harsha MV

    16. November 2010 um 4:43 Uhr

Benutzer-Avatar
Roman Judin

Ich verwende Timer, um Textbereiche zu fokussieren:

setTimeout(function() {
 $el.find('textarea').focus();
}, 0);

  • Mit dieser Lösung funktioniert es. Kannst du erklären warum es ohne nicht geht?

    – Mutant

    26. Februar 2014 um 0:36 Uhr


  • So wie ich es verstehe, wird der Klick selbst während der Ereignisbehandlung etwas Fokus gewähren und Ihren eigenen Fokus überschreiben. Das Timeout führt Ihren Fokus aus, nachdem die aktuelle synchrone Ereignisbehandlung abgeschlossen ist.

    – Dumm

    9. Mai 2014 um 20:37 Uhr

Basierend auf Ihrem Kommentar als Antwort auf Jacob möchten Sie vielleicht:

$('.user-status-buttons').click(function(){

    var id = $(this).attr('id');
    $("#commentbox-"+id).slideToggle("fast", function(){
        $("#commentbox-"+id+" #StatusMessageReplyMessage").focus();
    });

    return false;
});

Dies sollte die geben #StatusMessageReplyMessage Element Fokus nach Der Slide-Effekt ist beendet.

  • Danke. Ich hatte die falsche Textbereichs-ID geschrieben: D StatusMessageReplyMessage hätte anstelle von StatusMessageMessage sein sollen

    – Harsha MV

    16. November 2010 um 4:33 Uhr

Benutzer-Avatar
Zod

Die einfachste Lösung ist die Verwendung jQuery-Fokus

  $('#StatusMessageReplyMessage').focus();

HINWEIS: Wenn Sie dies in der Konsole testen, sendet Chrome den Fokus zurück an die Konsole! Dies kann dazu führen, dass Sie glauben, dass es nicht funktioniert hat, obwohl es tatsächlich perfekt funktioniert. Achten Sie einfach auf andere Skripte/Verhaltensweisen in Ihrer Umgebung, die den Fokus ergreifen, und alles wird gut 🙂

  • Diese Lösung ist großartig. Ganz direkt auf den Punkt. Ich arbeite mit einer privaten passwortgeschützten Web-App, die sich in einem Iframe befindet, und jedes Mal, wenn die Seite neu geladen wird, verliert das Textfeld den Autofokus und es ist frustrierend, immer wieder in das Textfeld klicken zu müssen, um es erneut einzugeben. Dies hat es gelöst. Nehmen Sie meine positive Bewertung an. Ich habe es in dasselbe Dokument eingefügt, in dem sich das Textfeld befindet, sodass es beim Aktualisieren auf diese js-Fokuslinie trifft und den Cursor sofort dort einrastet, wo er sein sollte.

    – Scott Dallas

    1. März um 0:51


1146230cookie-checkjQuery Textarea-Fokus

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy