我想首先说我不是专家,也许甚至不是jQuery的中间用户,所有人都对此表示感谢。
这是我的小问题的模拟:
https://jsfiddle.net/c897enhy/
<a id="someRandomID_hypNotifSentTo_0" class="NotifSent2" href = "#">
this is the text i want to get
</a>
<br>
<a id="someRandomID_hypNotifSentTo_0" class="NotifSent2" href = "#">
this is the text i want to get 2
</a>
<br>
<a id="someRandomID_hypNotifSentTo_0" class="NotifSent2" href = "#">
this is the text i want to get 3
</a>
if ($) {
$(document).ready(function () {
$("a[id*='_hypNotifSentTo_']").live("click", function ($e) {
// Will post list of recipients to be removed from the file
var x = $(this).text();
alert(x);
AjaxSuccessPopulateRecipients("restult");
});
function AjaxSuccessPopulateRecipients(result) {
alert("asdf");
var x = $('#NotifSent2').toString();
alert(x);
var x = $(this).text();
alert(x);
var recipients = $(this).text();
alert("1");
var recipientArr = recipients.split(',');
}
});
}
虽然,我能够从“点击”事件中获取活动链接的文本,但我无法从第二个函数中获取。
应用程序的工作方式是,第一个函数调用ajax c#文件,然后使用c#的一些结果将成功返回到第二个jquery函数。
我需要将从c#返回的结果与点击的超链接内部的结果进行比较,但是无法从“AjaxSuccess”函数中获取单击的文本。
答案 0 :(得分:1)
当您使用Ajax函数时,您将失去$(this)的上下文($(this)将不再引用所单击的链接)。尝试添加一个可以存储上下文的变量,如下所示:
$(document).ready(function () {
var $that;
$("a[id*='_hypNotifSentTo_']").live("click", function ($e) {
// Will post list of recipients to be removed from the file
$that = $(this);
var x = $that.text();
alert(x);
AjaxSuccessPopulateRecipients("restult");
});
function AjaxSuccessPopulateRecipients(result) {
alert("asdf");
//var x = $('#NotifSent2').toString();
//alert(x);
var x = $that.text();
alert(x);
var recipients = $(this).text();
alert("1");
var recipientArr = recipients.split(',');
}
});
答案 1 :(得分:1)
$(this)
内的 AjaxSuccessPopulateRecipients
引用了Widow对象,而不是被点击的锚标记。
只需将click事件的引用从click事件发送到第二个函数,就像这样
AjaxSuccessPopulateRecipients("restult", $(this));
将其用作此类上下文
function AjaxSuccessPopulateRecipients(result, context) { // <--- context refers to the anchor tag
alert("asdf");
var x = $('.NotifSent2').text();
alert(x);
var x = context.text();
alert(x);
var recipients = context.text();
alert("1");
var recipientArr = recipients.split(',');
}
答案 2 :(得分:1)
call()方法调用具有给定此值的函数, 论据单独提供。
变化:
AjaxSuccessPopulateRecipients("restult");
致:
AjaxSuccessPopulateRecipients.call(this, "restult");
这样做会将正确的 this 值传递给您的函数。
答案 3 :(得分:0)
您不应该通过此$('#NotifSent2')
选择器访问数据,因为#
选择器是用于在页面上查找ID的JQuery语法,而您的元素是使用class="NotifSent2"
构建的。 / p>
如果您希望从其他函数访问变量,则必须确保该变量在正确的范围内。
由于您的AJAX调用和AjaxSuccessPopulateRecipients()
函数属于同一范围,因此您无法访问两者中的$(this)。
只需将您要使用的变量传递给您的函数,如$(this)AjaxSuccessPopulateRecipients("restult", $(this));