2013-10-25 2 views
1

Я добрая новичок в java и javascript. Я хотел бы знать, как я могу закодировать следующий скрипт, чтобы мне не нужно было создавать столько строк кода. Этот скрипт используется для отключения полей и включения их только тогда, когда пользователь выбирает этот флажок.Цитирование в javascript для отключения полей

<script> 
function start() { 
    form1.s_Name.disabled = true; 
    form1.r_Name.disabled = true; 
    form1.s_Address.disabled = true; 
    form1.r_Address.disabled = true; 
    form1.s_Postal.disabled = true; 
    form1.r_Postal.disabled = true; 
    form1.s_City.disabled = true; 
    form1.r_City.disabled = true; 
    form1.s_Email.disabled = true; 
    form1.r_Email.disabled = true; 
    form1.s_Phone.disabled = true; 
    form1.r_Phone.disabled = true; 
} 

onload = start; 
function chgtx() { 
form1.s_Name.disabled = !form1.chkChange.checked; 
form1.r_Name.disabled =!form1.chkChange.checked; 
form1.s_Address.disabled = !form1.chkChange.checked; 
form1.r_Address.disabled = !form1.chkChange.checked; 
form1.s_Postal.disabled = !form1.chkChange.checked; 
form1.r_Postal.disabled = !form1.chkChange.checked; 
form1.s_City.disabled = !form1.chkChange.checked; 
form1.r_City.disabled = !form1.chkChange.checked; 
form1.s_Email.disabled = !form1.chkChange.checked; 
form1.r_Email.disabled = !form1.chkChange.checked; 
form1.s_Phone.disabled = !form1.chkChange.checked; 
form1.r_Phone.disabled = !form1.chkChange.checked; 
} 

Я думаю сформировать код вы можете увидеть, что только form1.s_ и form1.r_ и !form1.chkChange.checked; фиксированы и повторение.

Не могли бы вы посоветовать мне, как я могу преобразовать этот код в стиль цикла, чтобы быть более эффективным?

+1

Javascript не ява – gefei

ответ

2

Вы можете цикл над вашими полями, как это:

var inputFields = form1.getElementsByTagName("input"), 
    nbIF = inputFields.length; 

for(var iIF = 0; iIF < nbIF; iIF++) { 
    if(inputFields[iIF].name.substring(0, 2) === "s_" || 
     inputFields[iIF].name.substring(0, 2) === "r_") 
     inputFields[iIF].disabled = true; 
    } 
} 

и то же самое для другой функции ...

function chgtx() { 
    for(var iIF = 0; iIF < nbIF; iIF++) { 
     if(inputFields[iIF].name.substring(0, 2) === "s_" || 
      inputFields[iIF].name.substring(0, 2) === "r_") 
      inputFields[iIF].disabled = !form1.chkChange.checked; 
     } 
    } 
} 
+0

Все поля являются либо текстовые поля или текстовые поля, а не флажок. Для включения и отключения редактирования есть только один флажок. –

+0

@ user1571494: Хорошо, поэтому я упростил свой код на основе вашего комментария ... –

0

вы можете попробовать это, она отключит все элементы формы, кроме флажок

Javascript

function validate() 
{ 
    var dis = document.getElementById('myform'); 
    var ele = dis.getElementsByTagName("input"); 
    for(var i=0;i<ele.length;i++) 
    { 
     if(ele[i].getAttribute("type") != "checkbox") 
     { 
       ele[i].disabled = true; 

     } 
    } 

} 
+0

Я думаю, что это сработает. Небольшой вопрос. Есть ли атрибут readonly. Причина, если я использую отключенные данные атрибута, не сохраняется в моем db. –

+0

@ user1571494 Даже он отключен, он может иметь значение, назначенное javascript, и отправляется ли он на сервер, он изменит ваш db. – Shadow

+0

Как это возможно. Вы можете посоветовать. –

0

Если вы пытаетесь включить/отключить только некоторые поля, но не все, вы можете использовать массив как это:

<script> 
var fieldsToToggle = ["Name", "Address", "Postal"] 

function setDisabledStatus(fields, mode) { 
    var i; 
    var l = fields.length; 
    var fieldRoot; 
    var form = document.getElementById('myform'); 

    for (i = 0; i < l; i++) { 
    fieldRoot = fields[i]; 
    form["s_" + fieldRoot].disabled = mode; 
    form["r_" + fieldRoot].disabled = mode; 
    } 
} 

setDisabledStatus(fieldsToToggle, true); 
</script> 
Смежные вопросы