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:
function SetElementFC(element,FC1,FC2){ if($(element).attr('class')){ var id = $(element).attr('class'); }else{ var id = $(element).attr('id'); } //var id = element; $(element).bind(id+'kliknac',function(){ //alert('Klikniete w element ['+id+']'); $('html').bind('click', dismissLayer); FC1(element); }).bind(id+'odkliknac',function(){ //alert('OdKlikniete w element ['+id+']'); $('html').unbind('click',dismissLayer); FC2(element); }).click( function(e) { //alert('stopPropagation element ['+id+']'); e.stopPropagation(); }).trigger(id+'odkliknac'); $(element).click(function(){ $(this).trigger(id+'kliknac'); }); function dismissLayer() { $(element,'body').trigger(id+'odkliknac'); } }
Przykład zastosowania:
<script type="text/javascript"> SetElementFC(".Komentarze",function(el){ $(el).find('textarea').focus().val(''); $(el).find('input:submit').show(); },function(el){ $(el).find('textarea').val('Napisz komentarz...'); $(el).find('input:submit').hide(); }); </script> <div class="Komentarze"> <input type="submit" value="Dodaj" /> </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