0

Yiiフレームワーク(ajaxフォーム送信ボタンではない)でajaxリンク(CHTML :: ajaxLink)を作成しました。これは、ajaxを介してコントローラーに値を渡します。コントローラに異なる値を渡す複数のリンクがあります。値がコントローラーに渡される前に(jquery.ajaxオプションの「beforeSend」で)クリックされたリンクのid/class属性を取得したいと思います。単純に、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>

ユーザーが上記のリンクをクリックすると、ajaxLinkのbeforeSend部分でID(yt1)を取得したいと思います。

私は以下のコードを試しました:

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

上記のコードは機能しますが、リンクが2回クリックされた場合にのみIDがアラートされます。3回目のクリックで、IDは2回アラートされ、それ以降のクリックで増加し続けます。私はこの奇妙な問題について何の手がかりも持っていません。

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)

そのため、まだアラートはありません。

2回目:

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 属性を取得できます:$("#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 に答える