jquery — как изменить селектор, сохранив действие неизменным

#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] . $() Функция не может узнать, что оно получено из массива, а не из литерала, строковой переменной или выражения…