2010-07-29 3 views
1

У меня эти три поля на моей странице jsp.javascript отключить текстовое поле на странице jsp

<td> 
      <html:text property="my_dto.number1" </html:text> 
    </td> 
    <td> 
      <html:text property="my_dto.number2" </html:text> 
    </td> 

    <td>          
      <input type ="checkbox" id ='isTrue' /> 
    </td> 

Теперь я хочу, если isTrue проверено, два текстовых поля будут отключены. как это сделать?

ответ

1

Факт: JSP работает на веб-сервере, создает HTML/CSS/JS и отправляет его в webbrowser. JS работает в webbrowser и видит только дерево DOM HTML, а не любую строку Java/JSP. Правая страница в веб-браузере, выберите Посмотреть Souce и посмотреть сами. Ты это понял? ОК, затем продолжайте.

В созданном HTML-источнике вы должны увидеть некоторые элементы HTML <input type="text"> вместо компонентов Struts '<html:text>. Я не делаю Struts, но немного приличная среда MVC назначит эти HTML-элементы id. Если это не сделано или когда значение идентификатора генерируется случайным образом, вы должны установить фиксированный идентификатор самостоятельно. Согласно TLD documentation, вам необходимо установить атрибут styleId: <html:text styleId="someFixedId">.

Наконец, напишите функцию JS, которая будет выполнена при щелчке по галочке, и соответственно изменит атрибут disabled этих текстовых элементов. Энди Е уже дал некоторые намеки. Вот как должен выглядеть JSP:

<html:text property="my_dto.number1" styleId="number1" /> 
<html:text property="my_dto.number2" styleId="number2" /> 
<input type="checkbox" id="isTrue" onclick="disableNumbers(this)" /> 

<script> 
    function disableNumbers(checkbox) { 
     var number1 = document.getElementById("number1"); 
     var number2 = document.getElementById("number2"); 
     number1.disabled = number2.disabled = checkbox.checked; 
    } 
</script> 
+0

Я думаю, что * onchange * будет более подходящим, * onclick * не будет срабатывать, если вы сфокусируете флажок и нажмите клавишу пробела. Я не помню, если * onchange * срабатывает до или после, так что может понадобиться также тайм-аут 0мс. –

+0

@ Энди: он будет :) [Испытай себя] (http://jsbin.com/erene3). О, есть еще один недостаток onchange: он срабатывает только тогда, когда флажок теряет фокус. – BalusC

+0

huh, я не мог найти, что документировано где угодно ... Вы правы в том, что событие * change * срабатывает, когда фокус потерян (но это не относится ко всем браузерам, и это только тот случай, когда используется клавиатура). Я думаю, вы доказали, что событие * click * работает лучше для этой ситуации, хотя, +1 :-) –