Хорошо, позвольте мне объяснить больше ... цель состоит в том, чтобы установить флажок, если есть изменения в select. Фактический код был:
function checkit(date)
{
document.forms[0].date.checked = true;
}
<input type = "checkbox" name = "date[]" value = "2008-08-14">Aug 14, 2008<br>
<select name = "slot[]" size = "1" onchange = "checkit(date[]);"/>
<option value = "2008-08-15;0900;1700">9am to 5pm</option>
<option value = "2008-08-15;1330;1730">1:30pm to 5:30pm</option>
</select>
<input type = "checkbox" name = "date[]" value = "2008-08-15">Aug 14, 2008<br>
<select name = "slot[]" size = "1" onchange = "checkit(date[]);"/>
<option value = "2008-08-15;0900;1700">9am to 5pm</option>
<option value = "2008-08-15;1330;1730">1:30pm to 5:30pm</option>
</select>
<input type = "checkbox" name = "date[]" value = "2008-08-16">Aug 14, 2008<br>
<select name = "slot[]" size = "1" onchange = "checkit(date[]);"/>
<option value = "2008-08-15;0900;1700">9am to 5pm</option>
<option value = "2008-08-15;1330;1730">1:30pm to 5:30pm</option>
</select>
В PHP, если он видит переменную с [], он автоматически создает массив. В Javascript я ожидал, что Javascript распознает [] и выполнит его на основе текущего элемента. Например, если я выберу значение во втором флажке, оно должно запустить событие, чтобы установить флажок этого элемента. Я не хочу называть переменную как date1, date2, date3, date4 ... Надеюсь, это проясняет больше. Я знаю, что что-то упускаю ... Я попробовал ключевое слово this, чтобы превратить его в этот текущий элемент, но похоже, что это не работает, но, возможно, я использовал неправильный синтаксис.
Я ожидал, что это событие onchange, оно должно активировать свой аргумент «date []», но я предполагаю, что Javascript должен знать, какой элемент в date [] он будет использовать вместо того, чтобы явно вызывать его date [1] и так далее. Функция checkit получает имя "date []" и проверяет этот флажок date [].
Кстати, большое спасибо за дополнительные ответы (я узнал кое-что новое!)
pre в основном в порядке ... кого волнует выделение небольших фрагментов? Я не.
@Vinko Vrsalovic: В этом случае было бы очевидно, что исходный постер имел недопустимую разметку (забыл закрыть кавычки onchange)



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


Что именно вы пытаетесь сделать с этим кодом?
Согласно вашему фрагменту кода (в котором есть некоторые синтаксические ошибки), вы устанавливаете флажок, а затем вызываете функцию js, которая снова проверяет флажок ...?
Чего именно вы пытаетесь достичь?
Попробуйте этот код:
function checkit(date)
{
var date = document.getElementById(date);
date.checked = true;
}
<input type = "checkbox" id = "date[1]" value = "2008-08-14" onchange = "checkit('date[1]')");/>Aug 14, 2008<br />
<input type = "checkbox" id = "date[2]" value = "2008-08-14" onchange = "checkit('date[2]')");/>Aug 14, 2008<br />
<input type = "checkbox" id = "date[3]" value = "2008-08-14" onchange = "checkit('date[3]')");/>Aug 14, 2008<br />
Это не работает, потому что (как дреассказал) в вашем HTML-коде есть ошибки, и вы называете свои переменные способом, который конфликтует с синтаксисом javascript.
Имя вашего ввода - дата [1], а [ и ] имеют особое значение в коде javascript.
В этом коде:
document.forms[0].date.checked = true;
вы пытаетесь сначала получить доступ к форме документа (document.forms [0]), а затем пытаетесь получить доступ к полю с именем Дата, но его нет. Согласно вашей HTML-разметке у вас есть поля с именами «дата [1]», «дата [2]» и «дата [3]».
Но вы их не может получить доступ вот так:
document.forms[0].date[1].checked = true;
Почему? Поскольку дата [1] пытается проиндексировать Дата с помощью 1, и в этом случае ваш Дата не является массивом.
Вы может получить доступ это если заключите в кавычки:
document.forms[0]["date[1]"].checked = true;
Обратите внимание, что теперь «дата [1]» используется как строка.
PHP имеет синтаксис arr[] = something для размещения чего-либо в следующем доступном индексе в массиве.
В Javascript такого синтаксиса нет; если вы хотите поместить что-то в следующий доступный индекс в массиве, используйте вместо этого arr.push(something).
Но часть вашего примера, о которой вы говорите, написана в HTML, а не в Javascript. Javascript обращается к нему, но сами поля формы создаются в HTML ... поэтому вы должны дать ему свое собственное имя, а не автоматически увеличивающееся имя.
Если вы создаете HTML динамически с помощью вызовов DOM (например, для каждого элемента ввода, document.createElement('input'), назначьте атрибуты, а затем appendChild() для основной формы), вы можете автоматически назвать поля формы ... но это совершенно другой метод создания HTML & имеет кучу подводных камней, на которые следует обратить внимание.
Во-первых, вы хотите использовать специфичную для PHP функцию в Javascript. Нет, насколько я могу судить, такой функции нет.
Во-вторых, я настоятельно рекомендую не использовать имена ввода HTML, такие как «date [1]» ... чтобы мощь был легальным HTML (мне пришлось бы попробовать его в нескольких браузерах, чтобы убедиться, что это действительно разрешено), но это почти на 100% является вероятным источником ошибок в цикле обслуживания.
Я предполагаю, что этот код либо автоматически сгенерирован для вас, либо вы просто хотите взять блок и скопировать / вставить в своем редакторе. Если это первое, я бы назвал элементы «date_1» в коде автогена и покончил с этим. В последнем случае вы можете либо сохранить номер в своем коде (т. Е. Вручную ввести от date_1 до date_257), либо использовать вызов Javascript document.write, чтобы сгенерировать HTML с меньшими усилиями. Я бы сделал ТОЛЬКО последнее (document.write out HTML), если на самом деле нет другого пути. Если вы говорите о 10-25 копиях, ручная обработка этого вручную вряд ли вызовет проблемы, чем использование document.write; если у вас больше 25 таких экземпляров, то может быть имеет смысл автоматизировать генерацию элемента.
кто-то должен рассказать новым плакатам о функции форматирования кода. я вижу <pre> столько раз в вопросе ...