gpt4 book ai didi

javascript - jQuery 和输入 keydown 事件的困难

转载 作者:行者123 更新时间:2023-12-02 20:26:48 34 4
gpt4 key购买 nike

我正在制作一个简单的 JavaScript 增强列表。我希望它是一个输入列表,每个输入都有一个“添加”和“删除”按钮。如果用户单击“添加”,则会出现一个新的 li将被添加。如果用户单击“删除”,则 li将被删除。

它工作正常,除了在 <input> 中按“Enter”键之外。目前,它总是导致 Remove.click要触发的事件处理程序,除非列表中只有一项。我不知道为什么。我怎样才能抑制这种情况?

这是完整的 jQuery。我修复“输入”问题的尝试已被注释掉,并且不起作用。我怀疑我可以更好地设计这段代码;如果您看到改进,我很乐意听到。

function make_smart_list(list)
{
var ADD_CLASS = 'foo-widget-Add';
var REMOVE_CLASS = 'foo-widget-Remove';

var jq_list = $(list);
jq_list.parents('form').submit(function() {
return false;
});

function refresh_handlers() {
jq_list.find(sprintf('.%s, .%s', REMOVE_CLASS, ADD_CLASS)).unbind('click');
// jq_list.find('input').unbind('submit');
//
// jq_list.find('input').submit(function() {
// var jq_this = $(this);
// var next_button = jq_this.nextAll('button');
// if (next_button.hasClass(ADD_CLASS)) {
// next_button.nextAll('button').click();
// return;
// }
//
// if (next_button.hasClass(REMOVE_CLASS)) {
// return false;
// }
//
// });

jq_list.find("." + REMOVE_CLASS).click(function() {
var jq_this = $(this);
jq_this.parent().remove();
refresh_handlers();
return false;
});

jq_list.find("." + ADD_CLASS).click(function() {
var jq_this = $(this);
if (jq_this.prevAll('input').val() == '') {
return;
}

jq_this.parent().clone().appendTo(jq_this.parent().parent());
jq_this.parent().next().find('input').val('').focus();
jq_this.removeClass(ADD_CLASS).addClass(REMOVE_CLASS);
jq_this.text('Remove');
refresh_handlers();
return false;
});
}

refresh_handlers();
}

( sprintf 是我的另一个脚本。)

更新:标记如下所示:

<ul id="id_bar" class="foo-widget-list">
<li><input value=""><button class="foo-widget-Remove">Remove</button></li>
<li><input value=""><button class="foo-widget-Add">Add</button></li>
</ul>

这是包含其他组件的表单的一部分,但我只关心这一部分。

实际激活列表的脚本:

$(function() {
$.each($('.foo-widget-list'), function(index, item) {
make_smart_list(item)
});
});

更新 2:按如下方式设置按键可以防止“删除”按钮输入出现问题:

    jq_list.find('input').keydown(function(e) {
var next_button = $(this).nextAll('button');
if (e.keyCode == ENTER_KEYCODE && next_button.hasClass(REMOVE_CLASS)) {
return false;
}

但是在通过“添加”按钮关注输入时按 Enter 键仍然会导致 remove.click处理程序被解雇。 });

最佳答案

keup docs ,它实际上有一个用于检测“enter”键按下的具体示例。这是摘录,稍加修改(希望)可以更容易地放入您的代码中:

$([element_selector]).keyup(function(event) {
if (event.keyCode == '13') {
event.preventDefault();
}
// other keyup code here
});

您需要将其放入创建元素时放置在元素上的处理程序中,但这个基本想法应该可以正常工作。

关于javascript - jQuery 和输入 keydown 事件的困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4717168/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com