jquery 具有相同 ID 的多个输入的按键功能
jquery keypress function with multiple input with same id
大家好我有一个问题
这是我的 jquery 代码
<script type="text/javascript">
$('#com').keypress(function (event) {
var comm = $(this).val();
var keycode = (event.keycode ? event.keycode : event.which);
if (keycode == 13) {
var comm = $("#com").val();
alert(comm);
var hidid = $("#hidid").val();
alert(hidid);
$.ajax({
cache: false,
type: "POST",
url: "/Home/postComment",
datatype: "json",
data: { comment: comm, hidid: hidid },
error: function () {
alert("error ");
},
success: function () {
window.location.href = "/Home/Index";
}
});
}
event.stopPropagation();
});
</script>
我在控制器中这样调用它
[HttpPost]
public JsonResult postComment(string comment,int hidid)
{
Repository<whichOne> _rwo = new Repository<whichOne>();
Repository<Comment> _rc = new Repository<Comment>();
int _userId = Convert.ToInt32(Session["_userId"]);
Comment _comment = new Comment
{
userId = _userId,
comment = comment,
createDate = DateTime.Now,
isValid = true,
whichOneId = hidid,
};
_rc.Add(_comment);
_rc.Save();
return Json(new { success = true });
}
我有来自数据库的数据,我正在尝试获取我的数据的 ID,并从输入
中对 post 发表评论
@foreach (var item in Model._mywhichOneHelper)
{
@Html.Hidden("hidid",@item.id)
<input type="text" class="pull-left input-sm form-control" id="com" name="comments" style="border-radius: 12px;" placeholder="Your Comments...">}
然而,当我在写完一些东西后按下回车键时,我只能到达第一个数据。
Keypress 不适用于其他数据我该怎么办?
如您所见,当我编写并单击 Enter 进行首次输入时,它可以正常工作,但是当我对其他数据尝试此操作时,没有任何反应。非常感谢。
这里的问题是你的 jQuery select 或者只是找到第一个元素,因为它只期望一个元素有一个 id(id 应该是唯一的)。
让多个元素具有相同的 ID 不是一个好的做法 - 这是您的问题的一部分。如果您可以重新设计您的标记,使元素具有唯一的 id,但共享 class(例如 class="com"),那么您可以轻松地编写 jQuery select 或者找到它们。在这种情况下,仍然有一个解决方法,您可以使用 jQuery select 或者像这样: [id=com]
而不是 #com
并且这将找到所有匹配的元素而不是只寻找一个具有该唯一 ID 的(预期的)元素。
另请注意,我必须更改您的事件处理程序,以便它不使用另一个 jQuery select 或者,而是将值 $self
传递到闭包中,以便它保持正确的唯一实例而不是总是找到第一个。
$(function() {
$("[id=com]").keypress(function(event) {
var $self = $(this);
var comm = $self.val();
var keycode = (event.keycode ? event.keycode : event.which);
if (keycode == 13) {
var comm = $self.val();
alert(comm);
event.stopPropagation();
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<input type="text" class="pull-left input-sm form-control" id="com" name="comments" style="border-radius: 12px;" placeholder="Your Comments...">
<br />
<input type="text" class="pull-left input-sm form-control" id="com" name="comments" style="border-radius: 12px;" placeholder="Your Comments...">
<br />
<input type="text" class="pull-left input-sm form-control" id="com" name="comments" style="border-radius: 12px;" placeholder="Your Comments...">
<br />
更好的方法是使用唯一 ID,并通过 class select,像这样:
$(function() {
$(".com").keypress(function(event) {
var $self = $(this);
var comm = $self.val();
var keycode = (event.keycode ? event.keycode : event.which);
if (keycode == 13) {
var comm = $self.val();
alert(comm);
event.stopPropagation();
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<input type="text" class="pull-left input-sm form-control com" id="com1" name="comments" style="border-radius: 12px;" placeholder="Your Comments...">
<br />
<input type="text" class="pull-left input-sm form-control com" id="com2" name="comments" style="border-radius: 12px;" placeholder="Your Comments...">
<br />
<input type="text" class="pull-left input-sm form-control com" id="com3" name="comments" style="border-radius: 12px;" placeholder="Your Comments...">
<br />
大家好我有一个问题 这是我的 jquery 代码
<script type="text/javascript">
$('#com').keypress(function (event) {
var comm = $(this).val();
var keycode = (event.keycode ? event.keycode : event.which);
if (keycode == 13) {
var comm = $("#com").val();
alert(comm);
var hidid = $("#hidid").val();
alert(hidid);
$.ajax({
cache: false,
type: "POST",
url: "/Home/postComment",
datatype: "json",
data: { comment: comm, hidid: hidid },
error: function () {
alert("error ");
},
success: function () {
window.location.href = "/Home/Index";
}
});
}
event.stopPropagation();
});
</script>
我在控制器中这样调用它
[HttpPost]
public JsonResult postComment(string comment,int hidid)
{
Repository<whichOne> _rwo = new Repository<whichOne>();
Repository<Comment> _rc = new Repository<Comment>();
int _userId = Convert.ToInt32(Session["_userId"]);
Comment _comment = new Comment
{
userId = _userId,
comment = comment,
createDate = DateTime.Now,
isValid = true,
whichOneId = hidid,
};
_rc.Add(_comment);
_rc.Save();
return Json(new { success = true });
}
我有来自数据库的数据,我正在尝试获取我的数据的 ID,并从输入
中对 post 发表评论@foreach (var item in Model._mywhichOneHelper)
{
@Html.Hidden("hidid",@item.id)
<input type="text" class="pull-left input-sm form-control" id="com" name="comments" style="border-radius: 12px;" placeholder="Your Comments...">}
然而,当我在写完一些东西后按下回车键时,我只能到达第一个数据。 Keypress 不适用于其他数据我该怎么办?
如您所见,当我编写并单击 Enter 进行首次输入时,它可以正常工作,但是当我对其他数据尝试此操作时,没有任何反应。非常感谢。
这里的问题是你的 jQuery select 或者只是找到第一个元素,因为它只期望一个元素有一个 id(id 应该是唯一的)。
让多个元素具有相同的 ID 不是一个好的做法 - 这是您的问题的一部分。如果您可以重新设计您的标记,使元素具有唯一的 id,但共享 class(例如 class="com"),那么您可以轻松地编写 jQuery select 或者找到它们。在这种情况下,仍然有一个解决方法,您可以使用 jQuery select 或者像这样: [id=com]
而不是 #com
并且这将找到所有匹配的元素而不是只寻找一个具有该唯一 ID 的(预期的)元素。
另请注意,我必须更改您的事件处理程序,以便它不使用另一个 jQuery select 或者,而是将值 $self
传递到闭包中,以便它保持正确的唯一实例而不是总是找到第一个。
$(function() {
$("[id=com]").keypress(function(event) {
var $self = $(this);
var comm = $self.val();
var keycode = (event.keycode ? event.keycode : event.which);
if (keycode == 13) {
var comm = $self.val();
alert(comm);
event.stopPropagation();
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<input type="text" class="pull-left input-sm form-control" id="com" name="comments" style="border-radius: 12px;" placeholder="Your Comments...">
<br />
<input type="text" class="pull-left input-sm form-control" id="com" name="comments" style="border-radius: 12px;" placeholder="Your Comments...">
<br />
<input type="text" class="pull-left input-sm form-control" id="com" name="comments" style="border-radius: 12px;" placeholder="Your Comments...">
<br />
更好的方法是使用唯一 ID,并通过 class select,像这样:
$(function() {
$(".com").keypress(function(event) {
var $self = $(this);
var comm = $self.val();
var keycode = (event.keycode ? event.keycode : event.which);
if (keycode == 13) {
var comm = $self.val();
alert(comm);
event.stopPropagation();
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<input type="text" class="pull-left input-sm form-control com" id="com1" name="comments" style="border-radius: 12px;" placeholder="Your Comments...">
<br />
<input type="text" class="pull-left input-sm form-control com" id="com2" name="comments" style="border-radius: 12px;" placeholder="Your Comments...">
<br />
<input type="text" class="pull-left input-sm form-control com" id="com3" name="comments" style="border-radius: 12px;" placeholder="Your Comments...">
<br />