0

うまくいけば、これを適切に説明できます。

アイテムでいっぱいの HTML テーブルがあります。各項目は、その項目を編集するためのモーダルを起動するクリック可能なリンクです。私のコードは現在、アクションを 2 回起動させていますが、2 回目は完全なパラメータを含んでいません。「バブルアップ」を防ぐためにフォーカスを狭めようとすると(正しく理解している場合)、一度だけ起動しますが、パラメータも不完全です。

HTML:

<div id="content" class="span12">
<table class='table table-condensed table-bordered'>
    <tbody>
        <tr>
            <td class="span4">
                <a href="#" id="listingEditModal00000011643" listing_id="00000011643" user_sub="false">Example 1</a>
            </td>
            <td class="center"></td>
            <td>
                Oct 18th 2013 - 8:00 pm
            </td>
            <td>
                Example 1
            </td>
            <td>
                Example 1
            </td>
            <td>
                3.50
            </td>
            <td>
                Delete
            </td>
        </tr>
        <tr>
            <td class="span4">
                <a href="#" id="listingEditModal00000011784" listing_id="00000011784" user_sub="false">Example 2</a>
            </td>
            <td class="center"></td>
            <td>
                Oct 5th 2013 - 6:00 pm
            </td>
            <td>
                Example 2
            </td>
            <td>
                Example 2
            </td>
            <td></td>
            <td>
                Delete
            </td>
        </tr>

        ...

    </tbody>
</table>

jQuery:

$('#content').on('click', "[id^=listingEditModal]", function () {
    var id = $(this).attr('listing_id');
    var user_sub = $(this).attr('user_sub');
    var val = '/AdminListings/edit/' + id + '?user_sub=' + user_sub;
    $('#addItemBody').load(val);
    $('#addItemModal').modal({});
});

上記は、firebug に従って 2 回発生します。

GET http://example.com/AdminListings/edit/00000011643?user_sub=false 200 OK 366ms

GET http://example.com/AdminListings/edit/00000011643 200 OK 342ms

モーダルで使用されている 2 番目のもの (つまり、user_sub パラメーターは渡されません)

jQueryをそのまま変更すると:

$('#content').on('click', "[id^=listingEditModal] > td", function () {
    var id = $(this).attr('listing_id');
    var user_sub = $(this).attr('user_sub');
    var val = '/AdminListings/edit/' + id + '?user_sub=' + user_sub;
    $('#addItemBody').load(val);
    $('#addItemModal').modal({});
});

一度だけ起動し、user_sub パラメーターは含まれません。

GET http://example.com/AdminListings/edit/00000011643 200 OK 502ms

ここで何が間違っていますか?

4

2 に答える 2

1

必要に応じて、stopImmediatePropagation を使用します。

$('#content').on('click', "[id^=listingEditModal]", function (e) {
  e.stopImmediatePropagation(); // this will prevent further bubbling
  e.preventDefault(); // since it's a link, you should stop it from firing
  var id = $(this).attr('listing_id');
  var user_sub = $(this).attr('user_sub');
  var val = '/AdminListings/edit/' + id + '?user_sub=' + user_sub;
  $('#addItemBody').load(val);
  $('#addItemModal').modal({});
});

しかし、それは問題ではないようです。を起動している別の同様のイベントがあり$('#addItemBody').load(val);ます。'click', 'td'たとえば、別のクリックがないかどうかを再確認しましたか?

于 2013-10-11T22:46:07.717 に答える