2016-06-20 3 views
1

Я код, который так:Получение конкретного идентификатора с помощью JQuery

<div class="answer_id" value="1" name="false"> 
    <input id="AsnwerAnswer1" type="checkbox" value="1" name="true"></input> 
    Answer 1 
</div> 

Я 4 ответов, как приведенный выше код, единственное, что изменение значения в моем DIV и входные идентификаторы.

При нажатии на флажок выбран флажок получить истинное значение:

$("input:checkbox").click(function() { 
    var thisChecked = $(this)[0].checked; 
     $("input:checkbox").removeAttr('checked'); 
     $("input:checkbox").attr('name', 'false'); 
     $(this).attr('name', 'true'); 
     $(this)[0].checked = thisChecked ? true : false; 
}); 

Когда я нажимаю на кнопку, чтобы отправить ответ:

$('#sendReponse').click(function(){ 

Я хотел бы получить значение div, который содержит выбранный флажок (тот, у кого есть значение в true).

Что я должен добавить к этому:

var iReponseId = $(this).closest('.answer_id').attr('value'); 

Кстати было бы очень здорово, если бы вы могли бы помочь мне понять, что функция делает щелчок. По мне, это удалить все atrributes проверяются, так что я только могу получить один установлен флажок, это задать имя для каждого флажка ложь рассчитывать на тот, который выбран, но я не понимаю этого:

$(this)[0].checked = thisChecked ? true : false; 

EDIT:

Я сделал это, чтобы получить то, что я хотел:

$("input:checkbox").click(function() { 
     $("input:checkbox").not(this).prop('checked',false).removeAttr('class', 'chosen_answer'); 
     $(this).attr('class', 'chosen_answer'); 
    }); 

А потом

$('#sendReponse').click(function(){ 
var iReponseId = $('.chosen_answer').closest('.answer_id').attr('value'); 
+1

'$ (this) [0] .checked;' === 'this.checked;' –

+0

'$ (this) [0] .checked = thisChecked? true: false; 'откат к предыдущему состоянию после удаления проверенного свойства ... вы можете уменьшить это с помощью' this.checked = thisChecked' –

+0

Почему весь этот код, когда был изобретен переключатель для этого? – trincot

ответ

2

В вашем коде $(this)[0].checked = thisChecked ? true : false; помогает откат вашего предыдущего состояния проверенного свойства после удаления проверяемого свойства, его можно уменьшить как this.checked = thisChecked.


Вы можете уменьшить весь свой код следующим образом

// use change event always for chekbox 
$("input:checkbox").change(function() { 
    // get all checkbox 
    $("input:checkbox") 
     .not(this) // ignore the clicked checkbox 
     .prop('checked',false) // uncheck the checkbox 
     .attr('name', 'false'); // set the attribute 
    $(this).attr('name', 'true'); // set name of clicked 
}); 

Для получения DIV, который содержит вход, вы должны использовать answer_id класс не response_id.

var iReponseId = $(this).closest('.answer_id').attr('value'); 

FYI: При использовании пользовательских атрибутов всегда использовать стандартный формат data-*.

+0

В моем коде это был ответ, я просто перевел его, так что в тот момент, когда у меня есть тот же код, что и вы, проблема в том, что эта часть кода не находится в функции щелчка, это в том случае, если я нажимаю на кнопку отправить ответ. Я не могу, чтобы эти два работали вместе, потому что если пользователь нажимает на ответ A, затем B, затем A и т. Д., Мой ajax занимает много часов, чтобы работать. –

+0

@JulienS: разрешить пользователю щелкнуть только после успеха ajax –

+0

Я не могу этого сделать, если у вас есть другой способ исследовать это тоже хорошо. Дело в том, что у меня есть опрос, когда кто-то нажимает на ответ, я должен сохранить эту информацию, поэтому, когда человек подтвердит свой выбор, нажав «Отправить ответ» с некоторым ajax, он вернет результаты. –