Witam

Napisałem kod, który nie działa do końca jak powinien :/
Klikam w element, który powinien np. się rozwinąć, po kliknięciu w inny element powinien się schować.

Funkcja:
  1. function SetElementFC(element,FC1,FC2){
  2. if($(element).attr('class')){
  3. var id = $(element).attr('class');
  4. }else{
  5. var id = $(element).attr('id');
  6. }
  7. //var id = element;
  8. $(element).bind(id+'kliknac',function(){
  9. //alert('Klikniete w element ['+id+']');
  10. $('html').bind('click', dismissLayer);
  11. FC1(element);
  12. }).bind(id+'odkliknac',function(){
  13. //alert('OdKlikniete w element ['+id+']');
  14. $('html').unbind('click',dismissLayer);
  15. FC2(element);
  16. }).click( function(e) {
  17. //alert('stopPropagation element ['+id+']');
  18. e.stopPropagation();
  19. }).trigger(id+'odkliknac');
  20. $(element).click(function(){
  21. $(this).trigger(id+'kliknac');
  22. });
  23.  
  24. function dismissLayer() {
  25. $(element,'body').trigger(id+'odkliknac');
  26. }
  27. }

Przykład zastosowania:
  1. <script type="text/javascript">
  2. SetElementFC(".Komentarze",function(el){
  3. $(el).find('textarea').focus().val('');
  4. $(el).find('input:submit').show();
  5. },function(el){
  6. $(el).find('textarea').val('Napisz komentarz...');
  7. $(el).find('input:submit').hide();
  8. });
  9.  
  10. <div class="Komentarze">
  11. <input type="submit" value="Dodaj" />
  12. </div>

Ważne:
- wersja jQuery 1.4.2
- zastosowanie delegate + live/etc.

Oczekiwania:
- jeśli kliknę w element, który powinien się rozwinąć to inne elementy które są rozwinięte powinny się schować.
- schowanie powinno nastąpić wtedy, gdy kliknie się obojętnie gdzie aby tylko nie na elementy które mogą być rozwijane
- element, który ma być rozwinięty nie może korzystać z z-index: 100; + jeden dodatkowy div, który ma utworzyć tło przeźroczyste np. w lightbox etc.
- funkcja powinna działać nawet w DOM
- funkcja powinna działać tylko dla tego elementu, w który został kliknięty


Może ułatwię sprawę

Chodzi mi o unclick
jak focusin to musi byc focusout - ale to odpada