0

asp.net リピーター コントロールを使用して、次のマークアップを出力しています。

<div class="detailsItem">
    <table style="width:100%;border: solid green 1px">
      <tbody>
        <tr>
          <td colspan="3" style="text-align: right">
            <a href="javascript:editItem($(this).closest('.detailsitem'));">Edit</a>
          </td>
        </tr>
      </tbody>
    </table>
</div>

コード$(this).closest('.detailsitem')が含まれているdivを提供すると思いました。editItem に渡されたものについてアラートを出すと、JavaScript コードが表示されるだけです。それがどこから来たのかわからない。.parent運がないなどのさまざまな組み合わせを試しました。

同様のこの投稿を見つけましたが、役に立たなかったようです。問題は関数呼び出しにある可能性があると想定しています。

私は何が欠けていますか?

いつもありがとうございます!

4

3 に答える 3

1

jQueryセレクターでは大文字と小文字が区別されます。次のことを試してください...(項目の大文字のI)

$(this).closest('.detailsItem')

アップデート:

Chanduは、'this'オブジェクトがhref='javascript:...'内のウィンドウオブジェクトであることについても正しいです。'this'オブジェクトが実際のアンカーへの参照であるonclick=''属性を使用することもできます。

于 2012-07-06T23:07:53.030 に答える
1

コードに従って、editItem関数が実行されるときにthisコンテキストがオブジェクトに設定されます。window

代わりに、クリックイベントを目立たないようにバインドします。

例えば:

<div class="detailsItem">
    <table style="width:100%;border: solid green 1px">
      <tbody>
        <tr>
          <td colspan="3" style="text-align: right">
            <a href="#edit" class="edit-item">Edit</a>
          </td>
        </tr>
      </tbody>
    </table>
</div>

<script type="text/javascript">
 $(function(){
    $(".edit-item").click(function(e){
        e.preventDefault();
        editItem($(this).closest('.detailsItem')); //Changed the class selector to match what you have in HTML
    });
 });
</script>
于 2012-07-06T23:08:07.320 に答える
1

リピーターのアンカーにクラスを使用する必要があります

<a href="javascript:void(0);" class="edit">Edit</a>

イベントではready、すべてのアンカーにクリックイベントハンドラーをアタッチします。

$(".edit").live("click",function(){
    var cur = $(this);
    editItem(cur.closest("div.detailsItem"));
 });
于 2012-07-06T23:08:34.980 に答える