Обновление jQuery не работает, но JavaScript работает

0

Я пытаюсь использовать разные методы, чтобы моя страница обновляла одно значение ввода, когда я выбираю что-то из другого. Когда я пытаюсь сделать это одним способом с помощью 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);
                }

            });     
  • 1
    Просто любопытно. Вы используете $ (document) .ready ()?
  • 0
    Почему вы не используете точки с запятой?
Показать ещё 4 комментария
Теги:
setvalue

4 ответа

3
Лучший ответ

Там разница между селектором 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);

Можно избежать специальных символов с \\, но он становится все более громоздким и трудным для (а) записи и (б) читать.

  • 0
    3 правильных ответа всего за одну минуту, поэтому мне придется выбрать наиболее полный ответ, но большое спасибо всем за потраченное время, чтобы помочь моему пониманию! Настоящий момент с лампочкой! :)
1

У вас есть следующее:

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);
}
1

Как отмечали другие, существуют различия между селектором jQuery и document.getElementById. Поскольку селектор jQuery должен разбирать строку, а некоторые символы, такие как [, ] имеют особое значение, а document.getElementById обрабатывает все это как часть идентификатора. Вы можете попробовать избежать этих специальных символов, как упоминалось другими. Здесь я даю другое решение.

Вы можете попробовать селектор атрибутов id. Он делает что-то похожее на document.getElementById

function youPickedThis(id, num){
    var objID = "'any[" + num + "].id'"       
    $("[id="+objID+"]").val(id);
}

DEMO

  • 1
    Вам нужно закрыть ] там после objID .
  • 0
    @ lonesomeday: спасибо за указание. обновленный
1

Вам следует избегать квадратного скобки и точки

  var objID = "any\\[" + num + "\\]\\.id";

Чтобы использовать любой из метасимволов (таких как!) # $% & '() * +,./:; <=>? @[] ^' {|} ~) Как буквальная часть имени, это должен быть экранирован с помощью двух обратных косых черт: \. Например, элемент с id = "foo.bar" может использовать селектор $ ("# foo\.bar").

СПРАВКА

http://forum.jquery.com/topic/jquery-jquery-wont-recognise-attribute-names-containing-square-brackets#14737000000283511

Ещё вопросы

Сообщество Overcoder
Наверх
Меню