2015-04-01 2 views
0

Я пытаюсь, чтобы флажки отображались как переключатели в моем ASP .NET MVC веб-приложении. У меня есть 20-30 флажков, сгруппированных пополам. Для примера:Check/Uncheck using jQuery не работает

<input type="checkbox" id="@riggingType.RiggingTypeId 1" name="RiggingTypePlus" 
     value="@riggingType.RiggingTypeId" 
     checked="@riggingTypeIds.Contains(riggingType.RiggingTypeId)" /> 

<input type="checkbox" id="@riggingType.RiggingTypeId 2" name="RiggingTypeMinus" 
     value="@riggingType.RiggingTypeId" 
     checked="@riggingTypeIds.Contains(riggingType.RiggingTypeId)" /> 

Цель:

Я хочу сделать флажки, чтобы вести себя таким образом, что если Plus флажок установлен, то Minus снят автоматически, и наоборот. Я написал следующий код, чтобы попытаться достичь этой функции:

$(":checkbox").change(function() { 
    var inputs = $(this).parents("form").eq(0).find(":checkbox"); 
    var idx = inputs.index(this); 
    if (this.name.substring(this.name.length - 4, this.name.length) === "Plus") { 
     // just trying to check if I am getting the right it 
     // and I am getting the right id 
     // alert(inputs[idx + 1].id); 

     // But this does not work 
     $("#" + inputs[idx + 1].id).prop('checked', false); 
    } 
}); 

я делаю что-то здесь не так:

$("#" + inputs[idx + 1].id).prop('checked', false); 

Любая помощь будет оценена.

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

Ответ:

получил эту работу, используя следующие:

$(document).ready(function(){ 
    $(":checkbox").on('click', function() { 

    var $this = $(this); 
    var inputs = $this.closest("form").find(":checkbox"); 
    if ($this.attr('name').substring(this.name.length - 4, this.name.length) === "Plus" && $this.attr('checked')) { 
     $this.next().prop('checked', false); 
    } 
     else 
     { 
      $this.prev().prop('checked', false); 
     } 
    }); 
}); 

Fiddle Link

+0

Если и сделать скрипку - я решить уры проблемы (его неверно - есть теги с одинаковым идентификатором - попробуйте создать разные идентификаторы. – Legendary

+2

Оба флажка имеют одинаковый идентификатор. Последний флажок, вероятно, всегда будет отменен. Идентификаторы всегда должны быть уникальными. –

+0

@KJPrice oh, get it, dont внимание на теге, ty – Legendary

ответ

1

скрипку: https://jsfiddle.net/24gmnjwm/1/

$(document).ready(function(){ 
    $(":checkbox").on('click', function() { 
    var $this = $(this); 
    var inputs = $this.closest("form").find(":checkbox"); 
    if ($this.attr('name').substring(this.name.length - 4, this.name.length) === "Plus") { 
     $this.next().prop('checked', false); 
    } 
    }); 
}); 
+2

'input [idx + 1] 'является HTMLElement, а не объектом jQuery. Это вернет функцию, не определенную ошибкой – blgt

+0

Я пробовал это, и я получаю ошибку 'id not defined' –

+0

отредактировал, с скрипкой будет намного проще: – Legendary

0

Если мы можем предположить, что "плюс" checkb вол всегда появляется непосредственно перед его родственным «минус» флажок, то это будет делать трюк: форма

$(":checkbox").change(function() { 
    if ($(this).prop("name").match(/Plus$/)) { 
     $(this).next().prop("checked", !$(this).prop("checked")); 
    } else { 
     $(this).prev().prop("checked", !$(this).prop("checked")); 
    } 
}); 

образца:

<form> 
<input type="checkbox" name="RiggingTypePlus" value="2" checked /> 
<input type="checkbox" name="RiggingTypeMinus" value="2" /> 
<input type="checkbox" name="RiggingTypePlus" value="3" /> 
<input type="checkbox" name="RiggingTypeMinus" value="3" /> 
<input type="checkbox" name="RiggingTypePlus" value="4" /> 
<input type="checkbox" name="RiggingTypeMinus" value="4" /> 
<input type="checkbox" name="RiggingTypePlus" value="5" /> 
<input type="checkbox" name="RiggingTypeMinus" value="5" /> 
</form> 

fiddle

+0

Но это не работает, предполагая, что мне просто пришлось скопировать это вставить? Я могу проверить все флажки, вы можете сделать скрипку? –

+0

Это, безусловно, должно работать, если вы скопируете его вставить, и если ваша форма HTML - это то, как я представлял, что она будет отображаться (например, выше, идентификатор может быть там или отсутствует, не имеет значения) – James

+0

моя форма такова: http: // jsfiddle .net/3x5eec41/1/ –