2013-01-16 2 views
1

Итак, у меня есть элемент с переключателями, и я клонирую этот элемент при нажатии кнопки добавления; однако, как только я это сделаю, кнопка на начальном элементе не отмечена. Я знаю, почему это происходит, но как только я начал реализовывать работу, это не делает, как я ожидаю.JQuery xpath selector

Здесь было мое решение:

//This stores the value of the checked element into a variable before the clone 
    var radioKeep = $('input.event'+(numOfParts-1)+':checked').val(); 

    //Cloned the element passed into the function 
    $(element).parent().clone(true, false).insertAfter($(element).parent()); 

Затем после того, как клон, я стараюсь, чтобы убедиться, кнопка начальная радио перепроверены с помощью следующей комбинации JQuery и XPath.

$('input.event'+(numOfParts-1)+'[@value='+radioKeep+']').attr('checked', 'checked'); 

В результате все радиоэлементы проверены ... почему ???

Заранее спасибо.

+0

Возможно, я должен упомянуть, что не все элементы на самом деле отображаются, но только в исходном коде они отображаются checked = «проверено» конечная радиокнопка на странице, однако она остается явно проверенной. –

+0

Трудно сказать, можете ли вы 'console.log (radioKeep + '-' + numOfParts)', эти значения когда-либо меняются? Если нет, то ваш селектор будет соответствовать каждому клонированному элементу, и вы также никогда не очищаете значение, поэтому значение всегда будет соответствовать. Похоже, это, скорее всего, проблема. Можете ли вы получить jsFiddle? – Ohgodwhy

+0

Я предупреждал некоторые ценности, пытаясь разобраться в проблеме, и все имеет смысл, как я пытаюсь это сделать. Таким образом, $ ('input.event' + (numOfParts-1) оценивает значение $ ('input.event0') и radioKeep оценивает до нужного значения. –

ответ

1

Когда вы клонируете элемент, новый элемент имеет то же значение и класс, что и старый элемент, тогда вы устанавливаете проверочное значение для обоих из них, однако только один может быть проверен, чтобы последний получил отметку. .first зафиксирует, что

$('input.event'+(numOfParts-1)+'[@value='+radioKeep+']').first().attr('checked', 'checked'); 

Однако, это еще не будет работать, если вы используете JQuery новее, чем 1.3.2, потому что поддержка XPath была удалена в 1.3.2, просто удалите @

$('input.event'+(numOfParts-1)+'[value='+radioKeep+']').attr('checked', 'checked'); 

Теперь у нас есть возможная проблема будущего доказательства, вы используете .attr(), чтобы установить свойство, вы действительно должны использовать .prop("checked", true).

$('input.event'+(numOfParts-1)+'[value='+radioKeep+']').prop('checked', true); 

Если это не решит вашу проблему, я предлагаю разместить образец HTML и рабочую функцию, мы можем проверить ваш код. Я сделал много предположений здесь из-за отсутствия окружающей функции и отсутствия html.

+0

Спасибо, я не предоставил mor e, потому что никакого кода не требуется, вы ответили на мой вопрос красиво, спасибо. –