Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][JavaScript]select i akcja na input
Forum PHP.pl > Forum > Przedszkole
robos85
Mam taki kod JS:
  1. window.onload=Load;
  2.  
  3. function Load(){
  4. document.forms['compose_form'].reciever.enabled=true;
  5. }
  6. function check_reciever(){
  7. var form_compose=document.getElementById('friends_list');
  8. var selIndex=form_compose.selectedIndex;
  9. if form_compose.options[selIndex].value!=0{
  10. document.forms['compose_form'].reciever.disabled=true;
  11. }
  12. else{
  13. document.forms['compose_form'].reciever.enabled=true;
  14. }
  15. }

i form :
  1. <form action="/inbox" method="post" name="compose_form">
  2. <div style="width:565px;">
  3. <div style="float:left;width:52px;min-width:52px;text-align:left;padding-top:5px;">
  4. Do:
  5. </div>
  6. <div style="float:left;width:300px;">
  7. <input type="text" name="reciever" style="width:295px;" />
  8. </div>
  9. <div style="float:left;text-align:right;width:213px;">
  10. <select style="width:180px;" id="friends_list" onchange="check_reciever()">
  11. <option value="0">----------</option>
  12. <option value="1">11111111</option>
  13. <option value="2">22222222</option>
  14. <option value="3">33333333</option>
  15. </select>
  16. </div>
  17. </div>
  18. <div style="width:565px;clear:both;padding-top:10px;">
  19. <div style="float:left;width:52px;text-align:left;padding-top:5px;">Temat:</div>
  20. <div style="float:left;width:513px;"><input type="text" name="reciever" style="width:513px;" /></div>
  21. </div>
  22. <div style="width:565px;clear:both;padding-top:10px;">
  23. <div style="float:left;width:52px;text-align:left;">
  24. Treść:
  25. </div>
  26. <div style="float:left;width:513px;">
  27. <textarea style="width:513px;height:200px;"></textarea>
  28. </div>
  29. </div>
  30. <div style="width:565px;clear:both;padding-top:10px;text-align:right;">
  31. <button style="width:96px;height:24px;border:none;background:url(../images/send_button.png) no-repeat;"></button>
  32. </div>
  33. </form>


I gdy wybieram jakąś opcję z selecta, pole input nie przyjmuje atrybutu "disabled".
Co skopałem?
UNK
Kod
document.forms['compose_form'].reciever.enabled=true;


nie powinno być

Kod
document.forms['compose_form'].reciever.disabled=false;


?


EDIT @DOWN:

Kod
var form_compose=document.getElementById('friends_list');
var selIndex=form_compose.selectedIndex;

Czapla, raczej nie, aczkolwiek to tu może siedzieć błąd, ponieważ selIndex nie dostaje wartości pomimo, że form_compose.selectedIndex jest dobrze pobierane.
robos85 coś jest nie tak w tych 2 liniach tongue.gif
robos85
nie, chodzi mi głównie o to, że nie działa nic nawet po zmianie
Czapla
a nie powinno być

  1. var selIndex=compose_form.selectedIndex;
?
robos85
Cytat(Czapla @ 17.09.2008, 11:28:24 ) *
a nie powinno być

  1. var selIndex=compose_form.selectedIndex;
?



form_compose to zmienna zadeklarowana linijkę wyżej:/
nevt
nie ma osobno właściwości enabled i disabled - jest tylko disabled
robos85
Kod
window.onload=Loadform;

function Loadform(){
document.forms['compose_form'].reciever.disabled=true;
}
function check_reciever(){
var form_compose=document.getElementById('friends_list');
var selIndex=form_compose.selectedIndex;
if form_compose.options[selIndex].value!=0{
document.forms['compose_form'].reciever.disabled=true;
}
else{
document.forms['compose_form'].reciever.disabled=false;
}
}


Zadeklarowałem na początku dla pola reciever żeby było od razu disabled, lecz nawet to nie działa:/
UNK
Napisałem wyżej w moim poście, ale chyba już nikt tego nie zauważy tongue.gif
var selIndex=form_compose.selectedIndex;
selIndex nie dostaje wartości jest undefined przez co reszta skryptu się nie wykonuje.
Po małej zamianie i wstawieniu tego bezpośrednio do ifa
form_compose.options[form_compose.selectedIndex].value!=0
wywala: 'form_compose.options is undefined'
Coś nie tak jest z tymi kilkoma liniami tongue.gif
drPayton
@nevt napisał dość wyraźnie, ale powtórzę:
  1. <input type="text" id="bleh">
  2.  
  3. <script type="text/javascript">
  4. document.getElementById('bleh').disabled = "disabled";


Widzisz różnicę? snitch.gif
robos85
Cytat(drPayton @ 17.09.2008, 11:45:20 ) *
@nevt napisał dość wyraźnie, ale powtórzę:
  1. <input type="text" id="bleh">
  2.  
  3. <script type="text/javascript">
  4. document.getElementById('bleh').disabled = "disabled";


Widzisz różnicę? snitch.gif


tak dlatego pozmieniałem na disabled=true lub disabled=false
drPayton
  1. function check_reciever(){
  2. var form_compose=document.getElementById('friends_list');
  3. var selIndex=form_compose.selectedIndex;
  4. if (selIndex != 0) {
  5. document.forms['compose_form']['reciever'][0].disabled="disabled";
  6. } else {
  7. document.forms['compose_form']['reciever'][0].disabled="";
  8. }
  9. }


Bo masz dwa pola o nazwie 'receiver'...
robos85
EDIT:

zmianiam cały js kod na:
Kod
window.onload=Loadformcompose;

function Loadformcompose(){
    document.forms['compose_form'].reciever.disabled=true;
}
i to nie działa, ale jak dam:
Kod
window.onload=Loadformcompose;

function Loadformcompose(){
    var f_reciever=document.getElementById('reciever');
    f_reciever.disabled=true;
}
to działa.

Dlaczego jak odwołuję się do pól formularza poprzez name to nie działa, a jak getElementById robię to działa?:/
drPayton
Wyżej w moim poście masz odpowiedź winksmiley.jpg
robos85
Śmiga smile.gif

Tylko czemu nie mogę się odnościć poprze .reciever a muszę poprzez ['reciever']questionmark.gif
drPayton
Jeśli masz tylko jedno pole o nazwie 'receiver' to możesz (...).receiver.(...), jeśli więcej, to już jest tablica i tylko tak jak napisałem smile.gif
Shili
Jednak moim zdaniem lepiej jest skorzystać z setAttribute i removeAttribute zamiast disabled="". To tak na marginesie.
drPayton
@Shili: Uzasadnij proszę. Z chęcią dowiem się czegoś nowego (nie, tu nie ma złośliwości, poważnie pytam smile.gif

@down: Aaaa, myślałem, że to co naskrobałem nie działa w jakiś przypadkach winksmiley.jpg No, niewątpliwie lepiej wygląda Twoje podejście smile.gif
Shili
Bardziej eleganckie. I profesjonalne. Skoro atrybut nie jest potrzebny nie ma sensu zostawiać pustej wartości, skoro bez żadnego problemu można ten atrybut usunąć, a później go przywrócić w razie potrzeby. W kodzie nie zostają żadne śmieci.
Oczywiście - ustawianie atrybutu jako pusty nie jest niepoprawnością ze względu na strukturę dokumentu.

W tym momencie funkcja check_reciever() wyglądałaby jakoś tak:
Kod
function check_reciever(){
    var form_compose=document.getElementById('friends_list');
    var selIndex=form_compose.selectedIndex;
    if (selIndex != 0) {
        document.forms['compose_form']['reciever'][0].setAttribute('disabled', 'disabled');
    } else {
        document.forms['compose_form']['reciever'][0].removeAttribute('disabled');
    }
}
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.