查找单击了哪个框(或输入按键)
Find which box was clicked (or enter keypress)
我有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();
}
});
});
EDIT:谢谢大家指出id="item_level"
。这是我的疏忽,并不能解释为什么代码不能工作。它已经从问题中删除了
三个问题及其解决方案:
- id应该是唯一的。您将相同的ID
#item_level
应用于多个元素。但是你已经应用了类似的class
应用于他们,我们将使用它,并从HTML中删除额外的ID属性。 - 您的
keypress
事件需要一种方法来告诉哪个字段触发了事件。我们通过使用jQuery的.index()
方法来实现。 - 您的
click
事件还需要一种方法来识别两个图像中的哪一个被点击。再次,.index()
在这里有所帮助。但是,我们还使用了一个名为.eq()
的方法,将之前获取的index
提供给该方法。我希望我说的有意义。
看看这个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();
}
});
您可以更改
$(".image").click(function () {
//console.log("Let's Start! Image container was clicked");
$("#dialog").dialog("open");
var e_type_var = $(".container").data("custom-data"),
$(".image").click(function (e) {
//console.log("Let's Start! Image container was clicked");
$("#dialog").dialog("open");
var e_type_var = $(e.target).closest('.container').data("custom-data"),
$(e.target)是产生事件的元素(记住在事件函数中传递e)
用这个选择器搜索最接近的父节点。
https://api.jquery.com/closest/对于按键,您可以像aznbanana9所说的那样使用类名,并且使用相同的策略
$('.item_level').keypress(function (e) {
// Enter was pressed while in the input box.
if (e.which == 13) {
// Send .image container click.
$(e.target).closest('.container').find('.image').click();
无需更改代码,可能在这里我直接调用函数
我更新代码http://jsfiddle.net/qjs7c86v/71/
您的JSFiddle有这个:
$('#item_level').keypress(function (e) {
// Enter was pressed while in the input box.
if (e.which == 13) {
// Send .image container click.
$('.image').click();
}
});
表示根据id
选择元素。但是您的输入具有相同的id
字段,它们应该是唯一的:
<input type="text" name="item_level1" value="1" id="item_level" class="item_level" min="1" step="1" required>
和
<input type="text" name="item_level2" value="1" id="item_level" class="item_level" min="1" step="1" required>
所以,你可以添加另一个$('#item_level').keypress(function ...
或只是改变你的选择器,以查找类与相同的名称:
$('.item_level').keypress(function (e) {
// Enter was pressed while in the input box.
if (e.which == 13) {
// Send .image container click.
$('.image').click();
}
});
更多关于jQuery选择器的信息:http://www.w3schools.com/jquery/jquery_selectors.asp
相关文章:
- 单击jquery清除输入值
- 使用jquery在单击时在单元格中输入值
- 主体单击删除功能上的输入框宽度
- Javascript:;单击“;以及“;输入键“;
- 单击鼠标,用MySQL数据填充html表单输入字段
- 使用 jQuery,当我在输入框外部单击时,如何更改输入元素的值
- 使用jQuery切换来显示内容,但防止在用户单击输入元素时关闭
- 单击其他元素或鼠标向上时隐藏输入框,但保留一次焦点
- 防止在输入字段上单击事件
- 如何在单击时从输入字段中删除最后一个字符
- 通过单击链接(兄弟姐妹?)从无线电输入中获取id
- 单击下拉菜单时,将文本粘贴到输入框中
- 当用户单击按钮(在光标位置)时,在输入字段中添加一个文本字符串
- 单击表单1中的按钮:更改表单2中隐藏输入的值(纯javascript)
- 调用时未输入角度 ng 单击函数
- 在 javascript 事件单击后清空输入
- 如何在输入单击时出现键盘时使标题粘在顶部 (iPhone)
- 加载页面后未触发文件输入单击事件
- 如何在输入更改事件之前获得Bootstrap预先输入单击结果
- 无法识别输入单击