使用 jQuery .trigger() 通过点击事件将文本区域聚焦在移动设备上

Focus textarea on mobile from click event using jQuery .trigger()

好吧,我卡住了。

我正拼命地在移动设备上以编程方式从 javascript (jQuery) 专注于文本区域。我做了研究,了解到使用 .focus() 调出键盘的唯一方法是使用点击事件。所以我做了一个点击事件。当我点击该元素时它会起作用,除了我需要从不同元素上的触摸点触发它。所以很自然地,我在元素上尝试了 .trigger() 和 .triggerHandler() 。但这些都不起作用。

TLDR;我需要能够保持列表中的一个元素,一段时间后,div 将与 textarea 一起向下滑动并且 textarea 获得焦点(使用键盘)。

感谢任何帮助!

这是我的代码:

<div class="quicknote" data-id="0">
    <span>New Note</span>
    <div class="name"></div>
    <textarea class="text"></textarea>
    <div class="toolbar">
        <div class="left cancel">cancel</div>
        <div class="right finish">finish</div>
    </div>
</div>

jQuery

jQuery(document).ready(function($) {
    var holdThresh = 800;
    $(".row").on("touchstart", function(e) {
    var id = $(this).attr("data-id");
    var name = $(this).html();
    $(this).addClass("down");
    var timer = setTimeout(function() {
        $(".quicknote").attr("data-id", id);
        $(".quicknote .name").html(name);
        $(".quicknote").addClass("open");
        $(".quicknote").trigger("click");
        e.preventDefault();
    }, holdThresh);

    $(this).one("touchend touchmove", function(event) {
        $(this).removeClass("down");
        clearTimeout(timer);
    })

    $(".quicknote .cancel").on("touchstart", function() {
        $(".quicknote").removeClass("open");
    })

    $(".quicknote").click(function(event) {
        $("textarea").focus();
        event.preventDefault();
        event.stopPropogation();
    })
});

我想通了!对于发现此内容的任何人,这是我更新的 jQuery:

$(".row").on("touchstart", function(e) {
    var id = $(this).attr("data-id");
    var name = $(this).html();
    var go = true;
    var focus = false;

    $(this).addClass("down");

    var timer = setTimeout(function() {
        go = false;


        $(".quicknote").attr("data-id", id);
        $(".quicknote .name").html(name);
        $(".note").val("");

        $(".quicknote, .overlay").addClass("open");
        focus = true;

        e.preventDefault();
    }, holdThresh);

    $(this).one("touchmove", function(event) {
        go = false;
        $(this).removeClass("down");
        clearTimeout(timer);
    });

    $(this).one("touchend", function() {
        if (go) window.location = "view.php?id=" + id;
        else {
            if (focus) {
                $(".note").focus();
                focus = false;
            }
            $(this).removeClass("down");
            clearTimeout(timer);
        }
    })
})

我不确定为什么会这样,但我设置了一个标志 "var focus",并根据某些条件能够从 touchend 事件聚焦文本区域。希望这对某人有帮助! :)