Итак, у меня есть форма, отображающая таблицу с двумя флажками в строке. Когда форма отправлена, я пытаюсь выполнить ajax строки, в которых по крайней мере один флажок выбран для бэкэнд.Обнаружение дублирующих элементов jquery в массиве javascript
Markup:
<form id="my_form">
<table>
<tr data-id="1">
<td><input type="checkbox" class="js-option-1"></td>
<td><input type="checkbox" class="js-option-2"></td>
</tr>
<!-- etc -->
</table>
</form>
Поэтому у меня есть обработчик событий, который пытается создать массив объектов для отправки бэкэндом:
$("#my_form").live 'submit', (event) ->
event.preventDefault()
rows = []
$("input:checked").each() ->
rows.push row
objects = []
$.each objects, (index, value) ->
object = {
id: $(@).attr("data-id")
option_1: $(@).find("js-option-1").val()
option_2: $(@).find("js-option-2").val()
}
objects.push object
# ajax code
Проблема, конечно, является то, что если оба опции проверяются, в итоге я получаю два объекта в массиве и, таким образом, перенаправляют отправляемые данные.
Я попытался обойти это на обоих массивах, пытаясь обнаружить дубликаты и игнорировать толкая в этом случае:
$("input:checked").each() ->
row = $(@).closest("tr")
if $.inArray(row, rows) == -1 #if no duplicate
rows.push row
# or
if $.inArray(object, objects) == -1
objects.push object
Оба эти подхода не удалось, однако, так как я предполагаю, что механизм для сравнения литералов объектов и Объекты jquery приводят к тому, что они считаются не равными, хотя они одинаковы во всех обычных отношениях. Любые другие идеи?
Вы понимаете 'live' устарел в течение многих лет, и был удален * * в v1.9 ... –
сравнивает родные узлы DOM – adeneo
Если оба флажка отмечены, вы отправляете избыточные данные ... почему бы просто не использовать радиокнопки, тогда вам вообще не нужно будет проверять? – ToastyMallows