jquery 按 下 div 时 删除 上次 聚焦 的 文本 字段 中 的 字符

brgchamk  于 2022-11-22  发布在  jQuery
关注(0)|答案(3)|浏览(115)

我 有 一 个 div ( 按钮 ) , 当 按 下 它 删除 一 个 特定 文本 字段 的 字符 。 现在 我 试图 改变 代码 的 方式 , 删除 字符 的 最 后 一 个 焦点 文本 字段 。
这 是 只 删除 一 个 文本 字段 的 字符 的 代码 :

$(".delete").on("mousedown",function(evt) {
        var nameInput = document.querySelector("#name")
        var cursorPosition = nameInput.selectionStart;

    $("#firstName").val(
        function(index, value){
            return value.substr(0,cursorPosition - 1) + value.substr(cursorPosition);
    });

    nameInput.selectionStart = cursorPosition - 1;
    nameInput.selectionEnd = cursorPosition - 1;

    return false;
});

中 的 每 一 个
这 就是 我 现在 所 拥有 的

$(".delete").on("mousedown",function(evt) {

    var lastFocused;
    $(".item").focusout( function(e) {
      lastFocused = e.target;
    });

    var cursorPosition = lastFocused.selectionStart;

    lastFocused.val(
        function(index, value){
            return value.substr(0,cursorPosition - 1) + value.substr(cursorPosition);
    });

    lastFocused.selectionStart = cursorPosition - 1;
    lastFocused.selectionEnd = cursorPosition - 1;

    return false;
});

格式
HTML :

<div class="delete key-btn">
<input id="firstName" name="firstName" type="text" class="item" required/>
<input id="firstName" name="firstName" type="text" class="item" required/>

格式
在 控制 台 中 , 我 收到 错误 :" 无法 读取 未 定义 " 的 属性 " selectionStart " 。 有人 能 告诉 我 如何 实现 此 操作 吗 ? 谢谢

hyrbngr7

hyrbngr71#

这是可行的:

// 1. this has to be declared globally
var lastFocused;

// 2. you need to set the event handler for the 'item' elements outside of the delete handler
//    I'd also suggest using the 'focus' event here instead of 'focusout'
$(".item").focus(function(e) {
    lastFocused = e.target;
});

$(".delete").on("mousedown", function(evt) {
    // 3. need the null check if none of the inputs have been focused yet
    if (!lastFocused) {
        return;
    }

    var cursorPosition = lastFocused.selectionStart;

    // 4. need to wrap this in the jQuery function to use val()
    $(lastFocused).val(
        function(index, value){
            return value.substr(0,cursorPosition - 1) + value.substr(cursorPosition);
    });

    lastFocused.selectionStart = cursorPosition - 1;
    lastFocused.selectionEnd = cursorPosition - 1;

    return false;
});
jtjikinw

jtjikinw2#

你可以将目标返回给变量lastFocused,然后你的delete函数就可以工作了。我不知道你的代码的其余部分是什么样子的,但是这是我最好的猜测,你要找的是什么。这将消 debugging 误,你可以记录lastFocused。

lastFocused = $(".item").focusout( function(e) {
    return e.target;
});
bmp9r5qi

bmp9r5qi3#

我 用 代码 解释 得 更 好 。

var focusedItems = [];

$('.item').on('focusin', function() { focusedItems.push( $(this) ); }
$('.item').on('focusin', function() { focusedItems.splice( $(this), 1 ); }

$('.delete').on('mousedown', function(evt) {

    var lastFocused = focusedItems[ focusedItems.length - 1 ];

    // do whatever you want

}

中 的 每 一 个
当 你 聚焦 在 一 个 项目 上 时 , 你 把 它 作为 一 个 jquery 引用 推入 数组 , 当 你 聚焦 出 它 时 , 你 把 它 移 走 。 最 后 一 个 元素 是 最 后 一 个 被 聚焦 的 。

相关问题