在提交之前获取ajaxLink按钮的id

时间:2012-09-04 12:18:14

标签: php ajax jquery yii

我在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会被警告两次,并在后续点击时继续增加。我对这个奇怪的问题一无所知。

3 个答案:

答案 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作为请求的一部分。