2010-01-10 1 views
4

Я вызываю ссылку jquery.fancybox из события click, привязанного к строке таблицы. Действие работает отлично в первый раз, однако, если я закрою fancybox и снова нажмите на любую строку, анонимная функция, связанная с этой строкой, все еще срабатывает, но fancybox не запускается. Вот Javascript я использую:jquery fancybox triggered click only working once

$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> 

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

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

+0

может быть, он просто не может найти «a.edit» во втором исполнении? вы пытались вывести '$ jq (this) .find ('a.edit'). length'? – naivists

ответ

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(); 
}); 
+0

спасибо за ваше предложение. Я запустил сценарий, который вы опубликовали, но такое же поведение сохраняется. После каждого щелчка он будет предупреждать: «Найдено 1 элемент». Но он будет запускать fancybox только при первом щелчке, независимо от того, в каком я нажимаю; после этого отображается только диалоговое окно отладки. Это загадочно для меня, потому что я могу щелкнуть якоря по своему желанию, и это работает каждый раз. (Моя цель, однако, заключается в том, чтобы сделать якорь невидимым и запустить событие щелчка из строки onclick.) Что такое fancybox для этих событий щелчка якоря? – 2010-01-11 06:23:52

+0

Я не знаком с плагином fancybox –

0

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

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

0

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

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

Надеется, что это помогает

0

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

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

0

JQuery FancyBox триггер работает только один раз ..

Обычно мы использовать как этот $ ("FancyBox") триггер (до щелчка). но он не работает должным образом.

Просто измените Тигру, как это ... его работа для меня ...

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

Здесь сначала найти FancyBox затем вызвать его