JavaScript переименование формы ввода имени изображения - PullRequest
0 голосов
/ 11 января 2012

Я разрабатываю это для использования в Internet Explorer 8 (потому что на работе мы должны использовать его). У меня есть страница, на которой есть таблица с формой. В таблице есть кнопка для «клонирования» строк: « AddScheduleRow () ». Эта часть работает хорошо. В каждой строке есть кнопка для удаления этой строки " DeleteRow (r) ". Эта часть тоже работает хорошо. У меня также есть скрипт для переименования / перенумерации каждой строки, " RenumberRows () ". Это почти хорошо работает. Я могу переименовать текстовые поля (например, то, что раньше было StartDate3, теперь становится StartDate2). Тем не менее, в каждой строке есть ввод, который имеет тип = "изображение", и он назван так, как вы должны при любом вводе. Название этого - «StartDateCal». Проблема заключается в том, что во время процесса переименования, когда он попадает на вход изображения ( TheForm.StartDateCal [i] .name = "StartDateCal" + TempCounter; ), я получаю ошибку JavaScript "'TheForm.StartDateCal' является нулем или не объектом ". Я не могу понять это, и он стоит на пути продвижения.

Что я могу сделать, чтобы попытаться переименовать ?

Ниже необходим код:

HTML

<html>
    <head>
    </head>
    <body>
        <form name="UpdateSchedule" method="post" action="DoSchedule.asp">
            <input type="hidden" name="NumRows" value="0">
            <input type="hidden" name="RowsAdded" value="0">
            <table id="ClassScheduleTable">
                <tr id="ScheduleRow" style="display:none;">
                    <td>
                        <input type="text" name="RowNum" value="0" size="1" onclick="alert(this.name)">
                    </td>
                    <td>
                        <b>Start Date</b> <input type="text" name="StartDate" value="" onclick="alert(this.name);" size="8">&nbsp;
                        <input type="image" name="StartDateCal" src="http://www.CumminsNorthwest.com/ATT/Img/Calendar3.png" style="border-style:none;" onClick="alert('name = ' + this.name);return false;">
                    </td>
                    <td>
                        <input type="button" value="Del." name="DelRow" class="subbuttonb" onclick="DeleteRow(this);">
                    </td>
                </tr>
                <tr>
                    <td colspan="3" style="text-align:right">
                    <input type="button" value="Add Class Date" class="SubButton" onclick="AddScheduleRow();">
                    </td>
                </tr>
            </table>
        </form>
    </body>    
<script language="JavaScript">

JS

    var TheForm = document.forms.UpdateSchedule;
    var NumRows =0;
    var RowsAdded =0;
    function AddScheduleRow(){
        NumRows++;
        TheForm.NumRows.value = NumRows;
        RowsAdded++;
        TheForm.RowsAdded.value = RowsAdded;

        var TableRowId = "ScheduleRow";
        var RowToClone = document.getElementById(TableRowId);
        var NewTableRow = RowToClone.cloneNode(true);

        NewTableRow.id = TableRowId + NumRows ;
        NewTableRow.style.display = "table-row";

        var NewField = NewTableRow.children;

        for (var i=0;i<NewField.length;i++){
            var TheInputFields = NewField[i].children;
            for (var x=0;x<TheInputFields.length;x++){
                var InputName = TheInputFields[x].name;
                if (InputName){
                    TheInputFields[x].name = InputName + NumRows;
                    //alert(TheInputFields[x].name);
                }
                var InputId = TheInputFields[x].id;
                if (InputId){
                    TheInputFields[x].id = InputId + NumRows;
                //alert(TheInputFields[x].id);
                }
            }
        }

        var insertHere = document.getElementById(TableRowId);
        insertHere.parentNode.insertBefore(NewTableRow,insertHere);
        RenumberRows();
    }

    AddScheduleRow();

    function DeleteRow(r){
        var i=r.parentNode.parentNode.rowIndex;
        document.getElementById("ClassScheduleTable").deleteRow(i);
        NumRows--;
        TheForm.NumRows.value = NumRows;
        RenumberRows();
    }

    function RenumberRows(){
        var TempCounter = 0;
        for (var i=0;i<=RowsAdded;i++){
            if (TheForm.RowNum[i]){
                TempCounter++;
                TheForm.RowNum[i].name = "RowNum" + TempCounter;
                TheForm.RowNum[i].value = TempCounter;
                TheForm.StartDate[i].name = "StartDate" + TempCounter;
                TheForm.StartDateCal[i].name = "StartDateCal" + TempCounter;
            }
        }
    }


</script>

</html>

Ответы [ 2 ]

0 голосов
/ 11 января 2012

Вы можете использовать

document.getElementsByName('StartDateCal')[i].name = "StartDateCal" + TempCounter;

вместо

TheForm.StartDateCal[i].name = "StartDateCal" + TempCounter;
0 голосов
/ 11 января 2012

может быть связано с вашим DTD,

попробуйте HTML4 Strict:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...