如何在 JQuery 内部检查哪个控件触发了它
Posted
技术标签:
【中文标题】如何在 JQuery 内部检查哪个控件触发了它【英文标题】:How to Check inside JQuery which control has trigger it 【发布时间】:2021-07-06 15:01:43 【问题描述】:假设 TWO asp.net
控件触发 SAME JQuery
功能。
我们如何在JQuery
内部检查哪个控件触发了它:
asp.net
<asp:CheckBox ID="R1" runat="server" AutoPostBack="True" OnClick="return Discount(this);"/>
<asp:CheckBox ID="R2" runat="server" AutoPostBack="True" OnClick="return Discount(this);"/>
JQuery
function Discount(chk)
$(function ()
if ( chk.id== $("#R1") )
alert("Hi R1");
if (chk.id == $('#R2'))
alert("Hi R2");
);
【问题讨论】:
【参考方案1】:有很多问题:
chk.id
将是一个字符串,但 $("#R1")
将是一个 jquery 对象 - 它们永远不会相同。
ID="R1" runat="server"
表示 id
不会是 R1
,因为 asp.net “有用地”尝试通过添加上下文来使 ID 唯一。
所以
$("#R1").length
将始终 ==0,因为 asp.net 已为您破坏了您的 ID=(再次“有帮助”)。
这已在 OP 评论中得到确认 它显示 "Hi contentBody_R1"
alert("Hi R1")
将 永远 提供 "Hi contentBody_R1"
- 所以这不是 OP 正在运行的代码,可能它们正在运行 alert("Hi " + chk.id)
所以你不能使用$("#R1")
,除非你使用$("#contentBody_R1")
的完整ID - 然后假设你不会将它移动到不同的内容中以获得不同的id
最简单的选择是在通话中传递您想要的信息,例如:
<asp:CheckBox ID="R1" runat="server" AutoPostBack="True" OnClick="return Discount(this, 15.0);"/>
<asp:CheckBox ID="R2" runat="server" AutoPostBack="True" OnClick="return Discount(this, 17.5);"/>
function Discount(chk, discount)
或将信息存储在复选框上(如果使用服务器端控件,可能需要做一些额外的工作,但对于输入来说是这样):
<input type="checkbox" id="r1" data-discount="15" onclick="return Discount(this);">
<input type="checkbox" id="r2" data-discount="17.5" onclick="return Discount(this);">
function Discount(chk)
var discount = $(chk).data("discount") * 1.0;
另一种选择,除非您真的需要在复选框上自动回发(提示:您可能不需要)是使用 html 而不是服务器端控件,即:
<input type="checkbox" id="r1" data-discount="15" onclick="return Discount(this);">
<input type="checkbox" id="r2" data-discount="17.5" onclick="return Discount(this);">
function Discount(chk)
if (chk.id == "r1")
在这种情况下,您可以使用chk.id == $("#r1").attr("id")
,但如果您通过id
查找,那么您已经知道id
,因此无需查找。
【讨论】:
【参考方案2】:你的测试是假的,你必须这样写:
function Discount(chk)
$(function ()
if ( chk.id== "R1")
alert("Hi R1");
if (chk.id == 'R2')
alert("Hi R2");
);
你可以不用 if 语句来简化:
function Discount(chk)
$(function ()
alert("Hi " + chk.id);
);
【讨论】:
什么也没发生。如果我删除“if statemnet”,它会显示“Hi contentBody_R1”和“Hi contentBody_R2” 正常,我不明白,你想删除 if 吗?你想做什么..不清楚 没有。我不想删除 if.. 我只是告诉你正在打印什么 使用:alert(chk.id)
(在原始代码中)-chk.id != "R1"
(或“R2”)因为 asp.net 与您的 ID 密不可分以上是关于如何在 JQuery 内部检查哪个控件触发了它的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式检查控件时如何防止触发 CheckedChanged 事件?
Angular2:当jquery插件附加到ng-form对象时如何触发ng-valid?