Я хочу использовать переменную VBScript в ссылке на элемент DOM для веб-приложения, которое я создаю. Вот краткая выдержка из затронутой области кода:
dim num
num = CInt(document.myform.i.value)
dim x
x = 0
dim orders(num)
For x = 0 To num
orders(x) = document.getElementById("order" & x).value
objFile.writeLine(orders(x))
Next
Это мое первое знакомство с VBScript, и я не смог найти никаких методов выполнения этого типа действий в Интернете. Как видно из приведенного выше кода, я пытаюсь создать массив (заказов). Этот массив может иметь любое количество значений, но это число будет указано в document.myform.i.value. Таким образом, цикл For проходит через все текстовые входы с идентификатором order + x (то есть order0, order1, order2, order3, order4 и т. д. До num).
Кажется, это проблема с моей строкой orders (x), я не думаю, что она распознает то, что я имею в виду под getElementById("order" & x), и я не уверен, как именно это сделать. У кого-нибудь есть предложения? Это будет высоко ценится!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я могу только предположить, что это VBScript на стороне клиента, поскольку document.getElementById () недоступен с сервера.
попробуйте objFile.writeLine ("order" & x), затем проверьте источник, чтобы убедиться, что все элементы находятся в документе.
[Поскольку я не могу помещать код в комментарии ...] Это странно. Мне кажется, что все должно работать.
Единственное, что я могу придумать, это: изменить
orders(x) = document.getElementById("order" & x).value
objFile.writeLine(orders(x))
к
orders(x) = document.getElementById("order" & x)
objFile.writeLine(orders(x).value)
Вы правы, это просто поможет отладить проблему. Убедитесь, что вы действительно просматриваете все элементы в документе. Вы проверили, что возвращает document.myform.i.value?
document.myform.i.value возвращает 0 objFile.writeLine ("order" & x) работал должным образом. В то время на моей странице было 5 элементов с идентификаторами, начинающимися с Order, и он вернул: order0 order1 order2 order3 order4 Значит, это должно иметь какое-то отношение к использованию переменной в ссылке на DOM, не так ли?
Также я должен упомянуть, что document.myform.i.value НАЧИНАЕТСЯ с 0. Чтобы получить order0 - order4 выше, i.value было изменено на 5. Так что это зависит от того, когда запускается функция VBScript.
Это определенно имеет смысл, но это все еще не работает, я все еще получаю ошибки Object Expected при запуске функции. Есть ли другие способы ссылаться на DOM, где будет принята переменная?
Похоже, вы смешиваете клиентский и серверный код.
objFile.writeLine(orders(x))
Это VBScript для записи в файл, который вы можете делать только на сервере.
document.getElementById
Это код размером с клиента, который обычно выполняется в JavaScript. Вы можете использовать VBScript в IE на клиенте, но редко кто делает это.
На сервере вы обычно обращаетесь к полям формы, которые были частью тега формы, а не к элементам DOM (при условии, что вы используете классический ASP), используя request ("formFieldName").
Чтобы серверные материалы отображались на клиенте (при создании страницы), вы должны встроить их в свой HTML следующим образом:
<% = myVariable %>
или так (как часть блока кода):
document.write myVariable
Что ж, вот в чем дело: приложение, которое я создаю, предназначено для моего личного использования. Он не находится на «сервере», а скорее находится на моем локальном жестком диске. В результате работают как objFile.writeLine (orders (x)), так и document.getElementById. Это просто не распознавание использования переменной в идентификаторе.
Я смог заставить это работать. Спасибо вам обоим за ваше время и вклад. Вот что для меня решило:
Вместо того, чтобы использовать
document.getElementById("order" & x).value
Я установил весь идентификатор как переменную:
temp = "order" & x
document.getElementById(temp).value
Вроде работает как положено. Еще раз большое спасибо за потраченное на это время и усилия!
Разве вам не нужно немного изменить цикл?
For x = 0 To num - 1
НАПРИМЕР. С 4 элементами вам нужно перебрать от 0 до 3.
Да, это клиентский VBScript. Что касается предложения, я подтвердил, что элементы есть в документе. Я не уверен, что objFile.writeLine ("order" & x) будет делать то, что мне нужно. Кажется, что это просто напечатает «order0», затем «order1», а не x-е значение в массиве «order».