#jquery
#jquery
Вопрос:
Предположим, у меня есть массив Boxes={"#box5","#box3",#box1"","#box2","#box4"}
и у меня есть инструкция jquery
$(Boxes[2]).click(--------some code----------)
моя проблема в том, что оператор всегда выполняется при нажатии кнопки box1, даже если я меняю местами массив Box несколько раз между ними. Таким образом, даже когда Boxes[2] = "box2"
код все еще выполняется, когда я нажимаю box1, а не box2.
Это какая-то предварительная обработка?
Комментарии:
1. Вы имели в виду Boxes = { «#box5», «#box3», «#box1», «#box2», «#box4»}; ?
2. я думаю, он имел в виду массив
Boxes = ["#box5","#box3",#box1"","#box2","#box4"]
3. Смотрите ответ @ariel о том, почему он работает не так, как вы этого хотите. Это не может буквально работать так, как вы хотите, но если вы объясните свою более широкую проблему (возможно, в другом вопросе, поскольку это заметно меняет вопрос), я подозреваю, что у нас будет несколько хороших предложений о том, как решить более широкую проблему.
4. @andreas: Я надеюсь, что он этого не сделал, это (все еще) синтаксическая ошибка. 😉 @TheSuperTramp, вероятно, понял это.
Ответ №1:
При вызове $(Boxes[2])
важно значение Boxes[2]
во время его вызова.
Итак, лучше подключить событие click ко всем полям и внутри кода проверить, является ли значение массива полем, на которое нажимается, или нет.
Пример:
// bind to all elements that id begin with "box"
$("id^=[box]").click(function() {
// see if the clicked box is the one we want
if ($(this).id == Boxes[2]) {
// some code
}
})
Комментарии:
1. Точно. В
$()
функцию передается значение , полученное изBoxes[2]
.$()
Функция не может узнать, что оно получено из массива, а не из литерала, строковой переменной или выражения…