#javascript #jquery
#javascript #jquery
Вопрос:
Я наткнулся на попытку выбрать вновь созданный элемент с помощью классического селектора jQuery, минимальный пример:
var el = $("<input class='form-area' id='myTest'></input>");
$("#myElement").append(el);
// works fine
el.val("80");
// what I'd like to do
$("#myTest").val("80");
Поскольку я не уверен, почему желаемый селектор не работает с вновь созданным элементом, я попытался получить доступ к элементам после того, как я уверен, что они были созданы успешно:
MyAppendFunction().promise().done(function() {
$("#myTest").val("80");
}
Поскольку мне нужно создать несколько таких входных данных, и их количество варьируется (строки для таблиц), было бы очень хорошо, если бы я мог выбирать их с помощью jQuery selector вместо того, чтобы хранить ссылки на них в списке.
Комментарии:
1. Ваш код работает нормально, как вы можете видеть здесь: jsfiddle.net/rtbv475g . Одна из причин, по которой это не сработает, заключается в том, что у вас есть несколько элементов с одинаковым идентификатором
myTest
. В этом случае вам нужно создать уникальные идентификаторы или использовать класс.2. Также обратите внимание, что
append()
это синхронная операция, поэтому попытка вернуть из нее обещание является избыточным усложнением.3. Я убедился, что идентификаторы уникальны. Я создаю элементы после вызова ajax, может ли это что-то изменить?
4. Вам нужно убедиться, что вы вызываете
val()
обратный вызов, в который вы добавляете новый HTML, тогда он будет работать. Не могли бы вы отредактировать вопрос, чтобы показать более полный пример вашего JS, включая ваш вызов AJAX5. Я попытался выбрать элемент и сделать с ним что-то тривиальное, например $(«#MyTest»).fadeOut(), просто чтобы посмотреть, работает ли выбор. Я отредактирую вопрос, спасибо за ваши ответы, оценил.
Ответ №1:
Вы, конечно, перебираете элементы, которые вы добавляете в свой DOM, поэтому используйте индекс, чтобы присвоить им уникальные идентификаторы, такие как: YOURLOOP { …
id = `myTest-${YOURINDEX}`
var el = $("<input class='form-area' id='" id "myTest'></input>");
..
}
Чтобы получить доступ к любому из этих элементов, просто используйте элемент (нажатую кнопку, привязку, .. ), Чтобы получить элемент «sibling, parent, next» с идентификатором, начинающимся с «MyTest»:
$(‘#yourrferenced-element’).next(«[id^ =’MyTest-‘]»).attr(‘id’), чтобы получить его идентификатор, а затем сделайте то, что вы хотите с ним сделать.
Комментарии:
1. В комментариях вы можете прочитать, что все идентификаторы уникальны. респ за попытку помочь.
2. Все в порядке. Я отредактировал свой ответ: я не видел комментариев, когда писал свой ответ.
3. Код довольно тяжелый, я просто буду придерживаться ссылок на список.
4. Я думаю, вы смогли присвоить элементам <inputs>, которые вы добавили в уникальные идентификаторы DOM. Проблема в том, что нужно получить доступ к любому из них, верно? Но нам нужен ваш сценарий: когда вам нужно определить правильный из них? после нажатия кнопки / привязки?
5. не волнуйся, я как-нибудь разберусь