JQuery Fancybox срабатывает клик работает только один раз - PullRequest
4 голосов
/ 10 января 2010

Я звоню по ссылке jquery.fancybox из события click, привязанного к строке таблицы. Однако в первый раз действие работает нормально, если я закрою 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-коде якоря классифицируются как «edit»:

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

Я всегда вижу окно оповещения и могу изменить вызов триггера / щелчка () на remove (), и он будет «работать», удаляя якоря несколько раз. Я также могу несколько раз вручную щелкнуть саму ссылку $ ('. Edit'), и это все хорошо.

Так почему же событие щелчка якоря срабатывает только один раз, когда приходит по очереди от события щелчка строки? Это как-то связано с вызовом, который я делаю для $ (this) при описании функции?

Ответы [ 7 ]

4 голосов
/ 11 июня 2011

Дайте этому шанс:

$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;
});

Надеюсь, это поможет!

0 голосов
/ 09 мая 2018

Я добавил

elem.removeData( "fancybox" ); 

после

.trigger('click');

У меня это сработало.

0 голосов
/ 05 июня 2014

Триггер jquery fancybox работает только один раз.

Обычно мы используем как этот $ (". Fancybox"). Trigger ('click'); но он не работает должным образом.

Просто поменяй своего тигра вот так ... это работает на меня ...

 $(".fancybox").fancybox().trigger('click');

Здесь сначала найдите причудливый ящик, а затем активируйте его

0 голосов
/ 02 июня 2011

Tuffkid получил это работает; Я тоже работал над чем-то, чтобы решить эту проблему, и пришел к тому же выводу, что и он; все равно просто делюсь.

На нагрузке:

$(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)); });
    }
            });
}
0 голосов
/ 03 августа 2010

Вы решили эту проблему? Если нет, есть хитрый способ решить эту проблему. Я думаю, что метод 'trigger ()' будет отменен, когда вы откроете один раз и закроете окно. Я добавил скрытые элементы при каждом клике:

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

Надеюсь, это поможет

0 голосов
/ 16 января 2010

Я предполагаю, что fancybox пытается показать без события click. После показа fancybox вы запускаете щелчок за пределами fancybox, который закрывает его, прежде чем он сможет показать. Поместите ссылку на fancybox за пределы таблицы, а затем при нажатии на tr запустите щелчок привязки, после чего откроется окно с фантазией.

Если эта проблема не устранена, вы можете добавить несколько операторов отладки в библиотеку fancybox, чтобы отследить проблему.

0 голосов
/ 11 января 2010

Попробуйте отладить

$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();
});
...