Я пытаюсь использовать разные методы, чтобы моя страница обновляла одно значение ввода, когда я выбираю что-то из другого. Когда я пытаюсь сделать это одним способом с помощью javascript, он отлично работает, другой способ через jQuery - нет, и я честно не понимаю, почему, может кто-то указать, что я пропущу?
Этот Javascript отлично работает:
function youPickedThis(id, num){
var objID = "any[" + num + "].id"
document.getElementById(objID).value = id
}
Но этот jQuery не делает:
function youPickedThis(id, num){
var objID = "any[" + num + "].id"
$("#"+objID).val(id);
}
Объекты используемого/ссылки загружаются во время загрузки страницы через вызовы AJAX и т.д., Это как-то связано с тем, что вызывает проблему?
Спасибо за любые указатели, если у кого есть хорошие ссылки, чтобы читать, объясняя это, я бы очень благодарен! :)
Также попробовал это, но до сих пор нет кубиков...
$(document).ready(function(){
function updateHiddenInput(id, num){
var objID = "any[" + num + "].id";
$("#"+objID).val(id);
}
});
Там разница между селектором jQuery и document.getElementById
. Второй делает меньше, поэтому он знает, что все, что вы ему даете, будет выглядеть как id
. Например:
var objID = "any[" + num + "].id"
$("#"+objID).val(id);
Что это будет выглядеть? Пусть предположим, что num
равно 1
, скажем:
$('#any[1].id').val(id);
Это ищет элемент с id
#any
, атрибутом 1
и id
класса, потому что символы [].
все имеют специальные значения в селекторе. Чтобы продемонстрировать это, запустите следующую строку кода в консоли браузера:
$('<div id="any" class="id" 1="foo"/>').is('#any[1].id') // returns true
Лучший способ сделать этот выбор - сделать выбор с помощью document.getElementById
, а затем обернуть его в конструктор jQuery:
$(document.getElementById(objID)).val(id);
Можно избежать специальных символов с \\
, но он становится все более громоздким и трудным для (а) записи и (б) читать.
У вас есть следующее:
function youPickedThis(id, num){
var objID = "any[" + num + "].id"
$("#"+objID).val(id);
}
Это приводит к тому, что objID имеет некоторое значение, подобное any[3].id
, поэтому ваш jQuery выглядит так: $("#any[3].id").val(id);
jQuery интерпретирует.id как класс. Бегите так:
function youPickedThis(id, num){
var objID = "any\\[" + num + "\\]\\.id"
$("#"+objID).val(id);
}
Как отмечали другие, существуют различия между селектором jQuery и document.getElementById
. Поскольку селектор jQuery должен разбирать строку, а некоторые символы, такие как [
, ]
имеют особое значение, а document.getElementById
обрабатывает все это как часть идентификатора. Вы можете попробовать избежать этих специальных символов, как упоминалось другими. Здесь я даю другое решение.
Вы можете попробовать селектор атрибутов id. Он делает что-то похожее на document.getElementById
function youPickedThis(id, num){
var objID = "'any[" + num + "].id'"
$("[id="+objID+"]").val(id);
}
]
там после objID
.
Вам следует избегать квадратного скобки и точки
var objID = "any\\[" + num + "\\]\\.id";
Чтобы использовать любой из метасимволов (таких как!) # $% & '() * +,./:; <=>? @[] ^' {|} ~) Как буквальная часть имени, это должен быть экранирован с помощью двух обратных косых черт: \. Например, элемент с id = "foo.bar" может использовать селектор $ ("# foo\.bar").
СПРАВКА