javascript - 查找单击了哪个框(或输入按键)

标签 javascript jquery

我有 4 个容器,我需要知道单击了哪一个,或者当它们聚焦于输入框时按下“enter”键。

如何修改我的代码才能做到这一点?

<强> JSFiddle

HTML(此处仅显示 2 个容器):

<div id="boxes">
    <div class="container e_type1" data-custom-data="e_type1">
        <div class="header"><h2>E Type 1</h2></div>
        <div class="image"></div>
        <div class="footer">
            <input type="text" name="item_level" value="1" class="item_level" min="1" step="1" required>
        </div>
    </div>
    <div class="container e_type2" data-custom-data="e_type2">
        <div class="header"><h2>E Type 2</h2></div>
        <div class="image"></div>
        <div class="footer">
            <input type="text" name="item_level" value="1" class="item_level" min="1" step="1" required>
        </div>
    </div>
</div>
<div id="dialog" title="Progress">
    <p>
        <div id="progressbar">
            <div class="progress-label"></div>
        </div>
    </p>
    <div id="message"></div>
</div>

JS 片段(完整代码可以在 JSFiddle 中找到)

// Image container was clicked.
//  Get data and send first Ajax request.
$(".image").click(function () {
    //console.log("Let's Start! Image container was clicked");
    $("#dialog").dialog("open");
    var e_type_var = $(".container").data("custom-data"),
        item_level_var = $(this).$("#item_level").val();
        alert(e_type_var + " was clicked");
    forgeAjax(e_type_var, item_level_var, 'first_req', function (error) {
        // By default, show Cancel button.
        $("#dialog").dialog({
            buttons: [{
                text: "Close",
                click: function () {
                    $(this).dialog("close");
                }
            }]
        });
        // Focus Cancel button
        $('.ui-dialog button:eq(1)').focus();
        // If there's no error returned, show Cancel and Button2 buttons.
        if (!error) {
            $("#dialog").dialog({
                buttons: {
                    'Cancel': function () {
                        $(this).dialog('close');
                    },
                        'Button2': function () {
                        $("#message").html("");
                        startProgressBar(e_type_var, item_level_var);
                    }
                }
            });
            // Focus Button2.
            $('.ui-dialog button:eq(2)').focus();
        }
    });
});

编辑:感谢大家指出id="item_level"。这是我的疏忽,但没有解释为什么代码不起作用。它已从问题中删除。

最佳答案

三个问题及其解决方案:

  • ID 应该是唯一的。您将相同的 ID #item_level 应用于多个元素。但是您已经对它们应用了类似的 class,我们将仅使用它并从 HTML 中删除额外的 ID 属性。
  • 您的 keypress 事件需要一种方法来判断哪个字段触发了该事件。我们通过使用 jQuery 的 .index() 来实现这一点。 方法。
  • 您的 click 事件还需要一种方法来识别单击了两个图像中的哪一个。同样,.index() 在这里有所帮助。但我们还使用了一种名为 .eq() 的方法 我们将之前获取的索引提供给它。我希望我说得有道理。

看看这个 jsFiddle 并让我知道是否有帮助。

JavaScript:

$('.image').click(function () {
    $('#dialog').dialog('open');
    var e_type_var = $(this).parent().data('custom-data'),
        item_level_var = $(this).siblings('.footer').find('.item_level').val();
    forgeAjax(e_type_var, item_level_var, 'first_req', function (error) {
        $('#dialog').dialog({
            buttons: [{
                text: 'Close',
                click: function () {
                    $(this).dialog('close');
                }
            }]
        });
        $('.ui-dialog button:eq(1)').focus();
        if (!error) {
            $('#dialog').dialog({
                buttons: {
                    'Cancel': function () {
                        $(this).dialog('close');
                    },
                        'Button2': function () {
                        $('#message').html('');
                        startProgressBar(e_type_var, item_level_var);
                    }
                }
            });
            $('.ui-dialog button:eq(2)').focus();
        }
    });
});
$('.item_level').keypress(function (e) {
    if (e.which == 13) {
        $('.image').eq($('.item_level').index(this)).click();
    }
});

希望这有帮助。

关于javascript - 查找单击了哪个框(或输入按键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32015681/

相关文章:

javascript - 错误消息 : 'Unexpected block statement surrounding arrow body.(箭头主体样式)

javascript - 淡入淡出链接悬停不起作用

php - jQuery Ajax 到 PHP MySQL - 跨域内部服务器错误 (500)

javascript - 如何在不刷新页面的情况下从 JavaScript 代码执行 C# 方法?

javascript - 为什么 jQuery 函数返回 null?

javascript - 使用后退按钮从重新访问的页面中删除悬停效果

javascript - 如何在 div 加载内容时发出警报

javascript - 将参数传递给回调 node.js

javascript - React Hook "useSWR"被有条件地调用。 React Hooks 必须在每个组件渲染中以完全相同的顺序调用

javascript - 代码在 jsfiddle 上运行良好,但有一个功能在网站上不起作用