Dynamiczne umieszczanie elementu relatywnie do innego

0

Witam.
Próbuję ustawić komunikat dla pola na formularzu. Chcę aby był wyświetlany bezpośrednio pod inputem. Próbowałem różnych rzeczy znalezionych na forach lub przykłady z dokumentacji JQuery, ale otrzymuję dziwaczne liczby w left i top. Elementy input i message występują na stronie bezpośrednio po sobie i mają tego samego parenta.

    messageId = '#' + message;
    inputId = '#' + input;
    var width = $(inputId).outerWidth();
    var height = $(inputId).outerHeight();
    var left = $(inputId).position().left;
    var top = $(inputId).position().top + height;
    

   //próba 1. ustawienie przez style
    var messageStyle = 'left: ' + left + 'px;' ;
                    + ' top: ' + top + 'px';
    $(messageId).attr('style',messageStyle );      


     //próba 2. ustawienie przez position()
      $( messageId ).position({
        of: $( inputId ),
        my:  "left bottom",
        at:  "left top"
      })

    $(inputId).mouseover(
        function()
        {
            $(messageId).hide().fadeIn();
        }
     ).mouseout(function()
        {
            $(messageId).fadeOut();
        }  
    )
<div class='item invalid lvl_2'>Label<input type='text' id='item_9' name='item_9' value='185' />
   <div id="item_9_msg" class="field_error" style="top: 707px; left: 1132px; display: none;">Błędna wartość</div>    
   <script>showMessageOnInput('item_9','item_9_msg')</script> 
</div>

Kod html jaki uzyskuję przy 2. próbie. HTML pochodzi z firebuga i style elementu item_9_msg jest ustawione przez funkcję. top jest za duży o ok 500px a left powinien być ok. 800px. Nie jestem biegły w js i jquery więc zapewne gdzieś czegoś nie rozumiem. Będę wdzięczny za wszelkie wskazówki. Uwagi odnośnie jakości kodu też mile widziane.

Jeszcze css dla tych elementów:

.item input,
.nested_item input
{
    float:right;
}
.field_error
{
    background-color: red;
    color:white;
    border-width: 1px;
    border-color: white;
    
    display: none;
    position: absolute;
    z-index: 1;
}
0

przecież jak wstawisz div koło inputa - to przecież on będzie jako element blokowy - pod inputem. po cholerę zabawa z "position"?

0

Nadaje mu position:absolute, żeby mi nie rozsuwał formularza. Jak nie nadam w ogóle left czy top to w chrome na przykład element wyświetlany jest pod inputem, ale za jego prawą krawędzią. W IE natomiast wyświetla na inpucie :/. Wolałbym móc określić dokładnie położenie.

EDIT: Tak jak napisałem było zanim dokonałem zmiany. Mianowicie wcześniej div od komunikatu miałem poza div zewnętrznym w którym jest labelka i input. Teraz jak nie zmieniam position, komunikat wyświetla z lewej strony pod labelką, natomiast input mam przy prawej krawędzi (float: right).
Jak dla mnie zachowuje się logicznie, tylko głowię się, skąd biorą tak dziwne się wartości left i top dla inputa.

0

czyli pod inputem masz zawsze stala ilosc miejsca i komunikat jest albo widoczny, albo ukryty?

To powinno Ci pomóc.

.item { position: relative; }

Potem dla absolutów pozycje left: 0 (prawdopodnie), a top to wysokość inputa + odstęp jaki chcesz od niego.

0

Pod inputem mam kolejne inputy ;]. To jest dość spory formularz. Sprawdziłem. Komunikat ustawia się z lewej strony diva item

1

http://jsbin.com
działający przykład poproszę, będzie szybciej

0

Tak to mniej więcej u mnie wygląda. Koloru tła tylko nie mam żółtego ;]
http://jsbin.com/welcome/73733/edit

Gdybym mógł to bym pokazał w orginale...

1 użytkowników online, w tym zalogowanych: 0, gości: 1