2013-08-13 2 views
0

На моем сайте ASP.NET MVC 3 есть таблица с товарами. Каждая строка имеет скрытое поле ввода с значением bool.Изменение значения скрытого ввода с помощью jQuery и его сохранение

<input name="@string.Format("items[{0}].IsStriked", i)" type="hidden" value="false" /> 

Существует обработчик щелчка кнопки для каждой строки:

$(".shoppingcart a.strike").live("click", function (e) { 
     e.preventDefault(); 
     var $button = $(this); 
     var $tr = $button.parents("tr:first"); 
     if ($("input[name$='IsStriked']", $tr).val() == "false") { 
      var $isStriked = $("input[name$='IsStriked']", $tr).val("true"); 
     } 
     else { 
      var $isStriked = $("input[name$='IsStriked']", $tr).val("false"); 
     } 
     var $form = $button.parents("form"); 
     $form.submit(); 
    }); 

Но когда я пытаюсь изменить этот флаг для нескольких строк, я не могу. Он работает только для одной строки. Я полагаю, что из-за значения ввода по умолчанию. Как я могу это исправить? Спасибо.

+0

Я попытался изменить значение входа на $ ("вход [имя $ = 'IsStriked']", $ TR) .attr ('значение', 'ложь'); , но после отправки только одна строка имеет флаг. –

+0

У вас есть более одного ввода с тем же именем? –

+0

его имена динамичны и создают по счетчику: string.Format ("items [{0}]. IsStriked", i) –

ответ

0

Хотя я не изменил ни одной из ваших функций, я обновил привязку, чтобы использовать последний метод привязки и упростил логику в обработчике. Попробуйте.

$('.shoppingcart').on('click', 'a.strike', function (e) { 
    e.preventDefault(); 

    var $button = $(this), 
     $tr = $button.closest('tr'), 
     $input = $tr.find('input[name$="IsStriked"]'); 

    $input.val($input.val() == 'false' ? 'true' : 'false'); 

    $button.parents("form").submit(); 
}); 
Смежные вопросы