4

テーブル行にバインドされたクリック イベントから jquery.fancybox リンクを呼び出しています。アクションは最初は正常に動作しますが、fancybox を閉じて任意の行をもう一度クリックすると、その行にバインドされた無名関数は引き続き起動しますが、fancybox は起動しません。私が使用しているJavaScriptは次のとおりです。

$jq(document).ready(function() {

  $jq('a.edit').fancybox({
    'overlayShow': true,
    'hideOnContentClick': false
  });

  $jq('tr').click(function() {
    alert("clicked");
    $jq(this).find('a.edit').trigger("click");
  });

});

したがって、HTML には「編集」として分類されたアンカーがあります。

<tr>
  <td>...</td>
  <td>
    <a href="/candidates/22/qualifications/16/edit" class="edit">edit</a>
  </td>
</tr>

アラート ボックスは常に表示され、トリガー/クリック() 呼び出しを remove() に変更すると、「機能」し、複数の場合にアンカーが削除されます。$('.edit') リンク自体を手動で繰り返しクリックすることもできますが、すべて問題ありません。

では、アンカー クリック イベントが、行クリック イベントから順番に発生するときに 1 回だけ発生するのはどうしてでしょうか? 関数を説明するときに $(this) に行っている呼び出しと関係がありますか?

4

7 に答える 7

4

これを試してみてください:

$jq('a.edit').live('click',function(){
    $.fancybox('<div>Here is the content</div>'{
        overlayShow: true,
        hideOnContentClick: false
    });

    return false;
});

または、次のようにすることもできます。

 $jq('a.edit').live('click',function(){
    $.fancybox({
        href: 'some-page.html'
        overlayShow: true,
        hideOnContentClick: false
    });

    return false;
});

お役に立てば幸いです。

于 2011-06-11T01:55:11.877 に答える
0

タフキッドはそれを機能させました。私もこの問題を解決するために何かに取り組んでいて、彼がしたのと同じ結論に達しました。とにかく、共有するだけです。

ロード時:

$(document).ready(function(){
    $('#show').click(function(e){
        showPopUp($(this));
    });
});

JS機能:

function showPopUp(obj){
    obj.fancybox({      
        'href' : 'page.php',
        'onCleanup': function(){
             $(this).click(function(e) { showPopUp($(this)); });
    }
            });
}
于 2011-06-02T10:30:29.547 に答える
0

ファンシーボックスはクリックイベントなしで表示しようとしていると思います。fancybox が表示された後、fancybox の外側でクリックをトリガーすると、fancybox が表示される前に閉じます。ファンシーボックスのリンクをテーブルの外に置き、tr がクリックされるとアンカークリックがトリガーされ、ファンシーボックスが開きます。

この問題が解決しない場合は、fancybox ライブラリ内にいくつかのデバッグ ステートメントをスローして、問題を追跡することをお勧めします。

于 2010-01-16T01:35:11.210 に答える
0

この問題は解決しましたか?そうでない場合は、これを解決するためのトリッキーな方法があります。ボックスを一度開いて閉じると、「trigger()」メソッドのバインドが解除されると思います。クリックイベントごとに隠し要素を追加しました:

function openPopup(url) {
    $("body")
    .append("<a style='display:none'></a>")
    .fancybox({
        'href' : url
    })
    .trigger('click');
}

お役に立てれば

于 2010-08-03T02:17:41.043 に答える
0

これをデバッグしてみてください

$jq('tr').click(function() {
    // Step 1: make sure the following expression is actually returning elements
    var elements = $jq(this).find('a.edit');

    if ( elements.length ) {
        // Step 2: Just use the `click` method to trigger the event
        alert("Found " + elements.length + "elements");
        elements.click();
    } else {
        alert("No elements found");
    }
});

すべてが機能する場合は、次のように単純化できます

$jq('tr').click(function() {
    $jq(this).find('a.edit').click();
});
于 2010-01-10T21:12:05.933 に答える