0

我在 Yii 框架(不是 ajax 表单提交按钮)中创建了一个 ajax 链接(CHTML::ajaxLink),它通过 ajax 将一些值传递给控制器​​。有多个链接将不同的值传递给控制器​​。我想在将值传递给控制器​​之前获取单击链接的 id/class 属性(在 jquery.ajax 选项的“beforeSend”中)。只是我只想获取生成 ajax 请求的 id/class 属性。帮助!!!

更新::这是代码

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>

当用户单击上面的链接时,我想在 ajaxLink 的 beforeSend 部分中获取 id (yt1)。

我尝试了以下代码:

 'beforeSend' => 'function(){
 $("a").click(function(){
    var a = $(this).attr("id");
    alert(a); 
 }

上面的代码有效,但只有在点击链接两次时才会提醒 id。在第三次点击时,id 会收到两次警报,并在随后的点击中不断增加。我对这个奇怪的问题一无所知。

4

3 回答 3

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)

等等,因为它不断增加。

编辑2

另一种更好的方法是,您可以使用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 的 ajax 文档

默认情况下,上下文是一个对象,表示调用中使用的 ajax 设置($.ajaxSettings 与传递给 $.ajax 的设置合并)。

编辑3

另一种选择:将链接的 id 作为附加设置键传递:

'idOfLink'=>'js:$(this).attr("id")',
'beforeSend'=>'function(){
     // now you can access the id like:
     console.log(this.idOfLink);// or alert(this.idOfLink)
}'
于 2012-09-05T06:41:06.830 回答
1

如果您正在使用jQuery,您可以这样做来获取元素属性:$("#element_id").attr("id")或者如果您正在使用HTML5,您可以使用data链接上的标签,例如:

<a href="bla.php" data-name="your_data_here">Link</a>

并且还使用jQuery你这样做:$("#element_id").data("name")

于 2012-09-04T12:27:16.900 回答
0

您可能需要详细说明/发布代码片段,以便我们对您的问题有更好的了解。但是根据您在此处的解释,我假设您希望处理您的 Ajax 请求的任何内容都知道它源自哪个链接。假设异步处理在其他地方(在您的浏览器之外)完成,它将无法访问您的 DOM。因此,您需要将 id 作为参数嵌入到您的 ajax 请求中。换句话说,将发送请求的元素的 id 作为请求的一部分传递。

于 2012-09-04T12:22:40.293 回答