我在Yii框架中创建了一个ajax链接(CHTML :: ajaxLink)(不是ajax表单提交按钮),它通过ajax将一些值传递给控制器。有多个链接将不同的值传递给控制器。我希望在将值传递给控制器之前获取所单击链接的id / class属性(在jquery.ajax选项的“beforeSend”中)。简单地说,我只想获取生成ajax请求的id / class属性。帮助!
UPDATE ::这是代码
echo CHtml::ajaxLink ("Click Here",
Yii::app()->createUrl('default/del/id/6'),
array(
'beforeSend' => 'function(){
//I want to get the id of the link here
}',
'complete' => 'function(){
}',
'update' => '#loadContent'),
);
The above code will generate the following a tag:-
<a href="#" id="yt1">Click Here</a>
当用户点击上面的链接时,我希望在beforeSend部分获取id(yt1) ajaxLink。
我尝试了以下代码:
'beforeSend' => 'function(){
$("a").click(function(){
var a = $(this).attr("id");
alert(a);
}
以上代码有效,但只有在单击链接两次时才会提醒id。在第三次单击时,ID会被警告两次,并在后续点击时继续增加。我对这个奇怪的问题一无所知。
答案 0 :(得分:3)
您可以使用$.proxy()
来更改函数的上下文以锚定当前ajax对象的标记:
'beforeSend' => '$.proxy(function(jqXHR,settings){
console.log($(this).attr("id"));// or alert($(this).attr("id"))
// rest of your function
// you can still use the jqXHR object, and the settings map to manipulate the ajax call
},this)'
修改强>
让我告诉您为什么随后的点击次数会增加警报的数量。
这种情况正在发生,因为每次点击时,都会有一个新的点击处理程序与<a>
相关联,因为这行:
$("a").click(function(){...})
因此,当您第一次单击时,函数调用的顺序为:
beforeSend callback
assign click handler (1)
所以还没有提醒。
第二次:
1st click handler's alert
beforeSend callback
assign click handler (2)
第三次:
1st click handler's alert
2nd click handler's alert
beforeSend callback
assign click handler (3)
等等不断增加。
<强> EDIT2 强>:
替代方案和更好的方法,您可以使用context
选项制作上下文,即刚刚点击的链接:
'context'=>'js:this', // right now 'this' is link, so we can pass it
'beforeSend'=>'function(){// i would suggest using the signature 'function(jqXHR,settings)' so that
// you can modify the ajax call if you need to
console.log($(this).attr("id"));// or alert($(this).attr("id"))
// rest of your function
}'
来自jquery's ajax documentation:
默认情况下,上下文是一个对象,表示调用中使用的ajax设置($ .ajaxSettings与传递给$ .ajax的设置合并)。
<强> EDIT3 强>:
另一种选择:将链接的ID作为附加设置键传递:
'idOfLink'=>'js:$(this).attr("id")',
'beforeSend'=>'function(){
// now you can access the id like:
console.log(this.idOfLink);// or alert(this.idOfLink)
}'
答案 1 :(得分:1)
如果您使用jQuery
,则可以执行此操作以获取元素属性:$("#element_id").attr("id")
或者如果您使用的是HTML5
,则可以使用data
标记你的链接,如:
<a href="bla.php" data-name="your_data_here">Link</a>
并且还使用jQuery
执行此操作:$("#element_id").data("name")
答案 2 :(得分:0)
您可能需要详细说明/发布代码片段,以便我们更好地了解您的问题。但是根据你在这里解释的内容,我假设你需要处理你的Ajax请求,知道哪个链接发起了它。假设异步处理在其他地方(浏览器之外)完成,它将无法访问您的DOM。因此,您需要将id作为参数嵌入到ajax请求中。换句话说,传递发送请求的元素的id作为请求的一部分。