jQuery:当我有多个名称相同但 ID 唯一的元素时,我可以按名称 select 一个元素并读取它的 ID 吗?
jQuery: Can I select an element by name and read it's id when I have multiple elements with the same name, but unique id?
我有一个按钮列表,每个按钮都属于一个隐藏的表单,对应 item.Id
。我想在单击按钮时显示表单。为了实现这一点,我有一个 jQuery 脚本,它通过 name
($('[name="RequestSpeakButton"]')
) 选择按钮并读取它的 id
以知道将哪个隐藏表单设置为 visible
($("#RequestSpeak"+this.id).css("visibility", "visible")
).
当然,它不起作用。 IE。单击按钮时没有任何反应。
我不知道它是否重要,但是 document
由一个主视图和几个局部视图组成。该脚本位于主视图的脚本部分。按钮在局部视图中,表单在另一个局部视图中。
表单呈现如下(在局部视图中):
@foreach (AgendaItemViewModel item in Model.Agenda)
{
<div id="RequestSpeak@(item.Id)" style="visibility:hidden;">
<form asp-action="Action">
<input type="hidden" name="Id" value="@item.Id" />
<button type="submit">
Yes
</button>
<span class="btn btn-danger" onclick="javascript: document.getElementById('RequestSpeak'+@item.Id).style.visibility='hidden'">
No
</span>
</form>
</div>
}
表单的输出如下所示:
<div id="RequestSpeak57e33e17-c988-4a28-66a0-08d978345a1d" style="visibility:hidden;">
<form action="/Controller/Action" method="post">
<input type="hidden" name="Id" value="57e33e17-c988-4a28-66a0-08d978345a1d" />
<button type="submit">
Yes
</button>
<span class="btn btn-danger" onclick="javascript: document.getElementById('RequestSpeak'+57e33e17-c988-4a28-66a0-08d978345a1d).style.visibility='hidden'">
No
</span>
</form>
</div>
应该显示表单的按钮呈现如下(在另一个局部视图中):
@foreach (AgendaItemViewModel item in Model.Agenda)
{
<a name="RequestSpeakButton" id="@item.Id"
class="btn btn-primary">
Speak
</a>
}
输出如下所示:
<a name="RequestSpeakButton" id="57e33e17-c988-4a28-66a0-08d978345a1d"
class="btn btn-primary">
Speak
</a>
这是按钮的脚本:
$(document).ready(function () {
$('[name="RequestSpeakButton"]').click(function () {
alert("test"); /* Checking if the script runs. It doesn't. */
$("#RequestSpeak"+this.id).css("visibility", "visible")
});
})
我可以想象,因为我有很多同名的按钮,它们都会被 $('[name="RequestSpeakButton"]')
选中。我能知道点击了哪个吗? this.Id
够吗?
如果我放下 name
并通过 id
选择按钮,也许它会起作用。但我稍后会添加其他按钮,这些按钮将对 item
执行不同的操作,因此我需要名称才能知道要执行哪个操作。
document.getElementById('RequestSpeak'+57e33e17-c988-4a28-66a0-08d978345a1d)
可能不是您想要的。这甚至可能会引发错误,因为它不是正确的字符串。如果你把它改成像这样全部在引号内,它至少应该让你朝着正确的方向迈出一步:
document.getElementById('RequestSpeak57e33e17-c988-4a28-66a0-08d978345a1d')
要实现这一点,请将您的视图模板更改为 item.id 但在引号中。
document.getElementById('RequestSpeak'+'@item.Id')
看看是否能解决问题。
试试这个:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="
crossorigin="anonymous"></script>
</head>
<body>
<a name="RequestSpeakButton" id="57e33e17-c988-4a28-66a0-08d978345a1d"
class="btn btn-primary">
Speak1
</a>
<a name="RequestSpeakButton" id="57exxx7-cxx8-4x8-6xx0-08xxxxxxa1d"
class="btn btn-primary">
Speak2
</a>
<div id="RequestSpeak57e33e17-c988-4a28-66a0-08d978345a1d" style="visibility:hidden;">
<form action="/Controller/Action" method="post">
<input type="hidden" name="Id" value="57e33e17-c988-4a28-66a0-08d978345a1d" />
<button type="submit">
Yes
</button>
<span class="btn btn-danger" onclick="document.getElementById('RequestSpeak57e33e17-c988-4a28-66a0-08d978345a1d').style.visibility='hidden'">
No
</span>
</form>
</div>
<div id="RequestSpeak57exxx7-cxx8-4x8-6xx0-08xxxxxxa1d" style="visibility:hidden;">
<form action="/Controller/Action" method="post">
<input type="hidden" name="Id" value="57exxx7-cxx8-4x8-6xx0-08xxxxxxa1d" />
<button type="submit">
Yes
</button>
<span class="btn btn-danger" onclick="document.getElementById('RequestSpeak57exxx7-cxx8-4x8-6xx0-08xxxxxxa1d').style.visibility='hidden'">
No
</span>
</form>
</div>
<script>
$("[name='RequestSpeakButton']").click(function(){
var thisid = $(this).attr("id");
$("#RequestSpeak"+thisid).css("visibility", "visible")
})
</script>
</body>
</html>
或者您更喜欢这个?
@model WebApplication1.Models.TestModel
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="
crossorigin="anonymous"></script>
@foreach (AgendaItemViewModel item in Model.Agenda)
{
<div id="RequestSpeak@(item.Id)" style="visibility:hidden;">
<form asp-action="Action">
<input type="hidden" name="Id" value="@item.Id" />
<button type="submit">
Yes
</button>
<span class="btn btn-danger" name="noBtn">
No
</span>
</form>
</div>
}
@foreach (AgendaItemViewModel item in Model.Agenda)
{
<a name="RequestSpeakButton" id="@item.Id"
class="btn btn-primary">
Speak
</a>
}
<script>
$("[name='RequestSpeakButton']").click(function () {
var thisid = $(this).attr("id");
$("#RequestSpeak" + thisid).css("visibility", "visible")
})
$("[name='noBtn']").click(function () {
var thisid = $(this).parent().parent().css("visibility", "hidden");
})
</script>
我有一个按钮列表,每个按钮都属于一个隐藏的表单,对应 item.Id
。我想在单击按钮时显示表单。为了实现这一点,我有一个 jQuery 脚本,它通过 name
($('[name="RequestSpeakButton"]')
) 选择按钮并读取它的 id
以知道将哪个隐藏表单设置为 visible
($("#RequestSpeak"+this.id).css("visibility", "visible")
).
当然,它不起作用。 IE。单击按钮时没有任何反应。
我不知道它是否重要,但是 document
由一个主视图和几个局部视图组成。该脚本位于主视图的脚本部分。按钮在局部视图中,表单在另一个局部视图中。
表单呈现如下(在局部视图中):
@foreach (AgendaItemViewModel item in Model.Agenda)
{
<div id="RequestSpeak@(item.Id)" style="visibility:hidden;">
<form asp-action="Action">
<input type="hidden" name="Id" value="@item.Id" />
<button type="submit">
Yes
</button>
<span class="btn btn-danger" onclick="javascript: document.getElementById('RequestSpeak'+@item.Id).style.visibility='hidden'">
No
</span>
</form>
</div>
}
表单的输出如下所示:
<div id="RequestSpeak57e33e17-c988-4a28-66a0-08d978345a1d" style="visibility:hidden;">
<form action="/Controller/Action" method="post">
<input type="hidden" name="Id" value="57e33e17-c988-4a28-66a0-08d978345a1d" />
<button type="submit">
Yes
</button>
<span class="btn btn-danger" onclick="javascript: document.getElementById('RequestSpeak'+57e33e17-c988-4a28-66a0-08d978345a1d).style.visibility='hidden'">
No
</span>
</form>
</div>
应该显示表单的按钮呈现如下(在另一个局部视图中):
@foreach (AgendaItemViewModel item in Model.Agenda)
{
<a name="RequestSpeakButton" id="@item.Id"
class="btn btn-primary">
Speak
</a>
}
输出如下所示:
<a name="RequestSpeakButton" id="57e33e17-c988-4a28-66a0-08d978345a1d"
class="btn btn-primary">
Speak
</a>
这是按钮的脚本:
$(document).ready(function () {
$('[name="RequestSpeakButton"]').click(function () {
alert("test"); /* Checking if the script runs. It doesn't. */
$("#RequestSpeak"+this.id).css("visibility", "visible")
});
})
我可以想象,因为我有很多同名的按钮,它们都会被 $('[name="RequestSpeakButton"]')
选中。我能知道点击了哪个吗? this.Id
够吗?
如果我放下 name
并通过 id
选择按钮,也许它会起作用。但我稍后会添加其他按钮,这些按钮将对 item
执行不同的操作,因此我需要名称才能知道要执行哪个操作。
document.getElementById('RequestSpeak'+57e33e17-c988-4a28-66a0-08d978345a1d)
可能不是您想要的。这甚至可能会引发错误,因为它不是正确的字符串。如果你把它改成像这样全部在引号内,它至少应该让你朝着正确的方向迈出一步:
document.getElementById('RequestSpeak57e33e17-c988-4a28-66a0-08d978345a1d')
要实现这一点,请将您的视图模板更改为 item.id 但在引号中。
document.getElementById('RequestSpeak'+'@item.Id')
看看是否能解决问题。
试试这个:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="
crossorigin="anonymous"></script>
</head>
<body>
<a name="RequestSpeakButton" id="57e33e17-c988-4a28-66a0-08d978345a1d"
class="btn btn-primary">
Speak1
</a>
<a name="RequestSpeakButton" id="57exxx7-cxx8-4x8-6xx0-08xxxxxxa1d"
class="btn btn-primary">
Speak2
</a>
<div id="RequestSpeak57e33e17-c988-4a28-66a0-08d978345a1d" style="visibility:hidden;">
<form action="/Controller/Action" method="post">
<input type="hidden" name="Id" value="57e33e17-c988-4a28-66a0-08d978345a1d" />
<button type="submit">
Yes
</button>
<span class="btn btn-danger" onclick="document.getElementById('RequestSpeak57e33e17-c988-4a28-66a0-08d978345a1d').style.visibility='hidden'">
No
</span>
</form>
</div>
<div id="RequestSpeak57exxx7-cxx8-4x8-6xx0-08xxxxxxa1d" style="visibility:hidden;">
<form action="/Controller/Action" method="post">
<input type="hidden" name="Id" value="57exxx7-cxx8-4x8-6xx0-08xxxxxxa1d" />
<button type="submit">
Yes
</button>
<span class="btn btn-danger" onclick="document.getElementById('RequestSpeak57exxx7-cxx8-4x8-6xx0-08xxxxxxa1d').style.visibility='hidden'">
No
</span>
</form>
</div>
<script>
$("[name='RequestSpeakButton']").click(function(){
var thisid = $(this).attr("id");
$("#RequestSpeak"+thisid).css("visibility", "visible")
})
</script>
</body>
</html>
或者您更喜欢这个?
@model WebApplication1.Models.TestModel
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="
crossorigin="anonymous"></script>
@foreach (AgendaItemViewModel item in Model.Agenda)
{
<div id="RequestSpeak@(item.Id)" style="visibility:hidden;">
<form asp-action="Action">
<input type="hidden" name="Id" value="@item.Id" />
<button type="submit">
Yes
</button>
<span class="btn btn-danger" name="noBtn">
No
</span>
</form>
</div>
}
@foreach (AgendaItemViewModel item in Model.Agenda)
{
<a name="RequestSpeakButton" id="@item.Id"
class="btn btn-primary">
Speak
</a>
}
<script>
$("[name='RequestSpeakButton']").click(function () {
var thisid = $(this).attr("id");
$("#RequestSpeak" + thisid).css("visibility", "visible")
})
$("[name='noBtn']").click(function () {
var thisid = $(this).parent().parent().css("visibility", "hidden");
})
</script>