2014-09-18 4 views
0

Я использую следующий код в моем .jsp:две функции с OnChange

<script type="text/javascript"> 
function radioClick(e) { 
    // workaround for IE, which fires the changed event merely when the focus changes 
    e.blur(); 
    e.focus(); 
} 

function showFoo(e) { 
    document.getElementById('foo_agb').style.visibility = 
     e.checked && e.id == 'foo_radio_button' ? 'visible' : 'hidden'; 
    document.getElementById('foo_birthday').style.visibility = 
     e.checked && e.id == 'foo_radio_button' ? 'visible' : 'hidden'; 
} 

function hideFoo(e) { 
    document.getElementById('foo_agb').style.visibility = 'hidden'; 
    document.getElementById('foo_birthday').style.visibility = 'hidden'; 
} 



function showBar(e) { 
    document.getElementById('bar_agb').style.visibility = 
     w.checked && e.id == 'bar_radio_button' ? 'visible' : 'hidden'; 
    document.getElementById('bar_personalnr').style.visibility = 
     w.checked && e.id == 'bar_radio_button' ? 'visible' : 'hidden'; 
} 

function hideBar(e) { 
    document.getElementById('bar_agb').style.visibility = 'hidden'; 
    document.getElementById('bar_personalnr').style.visibility = 'hidden'; 
} 
</script> 

Это нужно вызвать, нажав на кнопку радио, как что:

<% 
     if (unrelatedstuff){ 
      } 

%> 
<INPUT id="foo_radio_button" <%=checked%> type="Radio" value="unrelated" name="Something" onclick="radioClick(this)" onchange="showFoo(this); hideBar(this);"> <%=list[i].getName()%><br> 
<% 
     } 

     else if (moreunrelatedstuff){ 
       } 

%> 
<INPUT id="bar_radio_button" <%=checked%> type="Radio" value="unrelated" name="Something" onclick="radioClick(this)" onchange="showBar(this); hideFoo(this);"> <%=list[i].getName()%><br> 
<% 
     } 
     else { 
      if (youguessditevenmoreunrelatedstuff){ 
      } 
%> 
<INPUT <%=checked%> type="Radio" value="unrelated" name="Something" onclick="radioClick(this)" onchange="hideFoo(this); hideBar(this);"> <%=list[i].getName()%><br> 

Я думал, что я могу позвонить более одной функции с «onchange», например «showFoo; hideBar;» но он, похоже, не работает.

Любые идеи, что я мог сделать неправильно, или как достичь более чем одного действия на «onChange»?

+1

вызов другой функции внутри одной функции, и если это только предполагается иногда называют затем использовать, если заявление для проверки состояние. Вероятно, есть более простой способ, но это то, что я бы сделал. – brianforan

ответ

1

Я предлагаю вам избегать обструктивного javascript и перемещать все во внешний файл.

var currentObject = document.getElementById("bar_radio_button"); 
currentObject.addEventListener("change", function() { 
    other_function(); 
    another_function(); 
}); 
+0

Какой смысл преподавать студентам, чтобы сделать это иначе, если это более эффективно/организовано? С уважением, кто-то слегка сумасшедший, я прошел через весь семестр другого пути – brianforan

+0

Я думаю, что это легче понять. Вы видите элемент html, и вы буквально присоединяете к нему события. Если вы пишете ненавязчивый javascript, вам сначала нужно получить ссылку на элемент DOM, и некоторые люди могут запутаться в этом, тем более, что они еще не знакомы с классами, идентификаторами и тегами на 100%. Obstusive JS - быстрый старт, unobstusive более оранизирован и избегает путаницы в больших проектах. –

+1

@pbrianq 'концепция> эффективно'. Иногда концепции важнее делать что-то определенным образом. Именно поэтому класс пузыря преподается до быстрого сортировки. Иногда лучший способ включает слишком много накладных расходов для класса, и более простой («худший») способ используется, чтобы помочь студенту понять. –

0

К сожалению, уже нашел свою ошибку сразу после размещения его .. У меня был

w.checked 

вместо

e.checked 

в одной из функций.

Иногда вы не можете видеть лес за все деревья .. :)

Смежные вопросы