2013-09-05 3 views
2

Я пытаюсь пройти через gridview и бросить предупреждение пользователю, если они не заполнили количество на предмет, который они проверили. Но он работает только с первым флажком, и он не возвращает false, потому что код все еще выполняется на стороне сервера.jquery each() только цикл через asp.net gridview один раз

function GetCheckedRows() { 
    var checkBox = $("#flexCheckBoxList") 
    var textBox = $("#flexTextBox") 
    $("#flexGridView tr").each(function() { 
     if ($(checkBox).is(':checked')) { 
      if (textBox.val().length === 0) { 
       alert("You must specify the amount needed"); 
       return false; 
      } 
      else { 
       return true; 
      } 
     } 
    }); 
} 

Завершено! Хотел показать готовый код, который проходит и останавливается, когда что-то не так. Мне пришлось создать переменную, чтобы остановить выполнение цикла. Это не только проверяет пустое значение, но также проверяет, является ли оно тоже.

function GetCheckedRows() { 
    var exitSubmit = false; 
    $(".gridView tr").each(function (e) { 
     var checkBox = $(this).find("input[type='checkbox']"); 
     var textBox = $(this).find("input[type='text']"); 
      if (checkBox.is(':checked')) { 
       if (textBox.val().length === 0 || !$.isNumeric($(textBox).val())) { 
        exitSubmit = true; 
        return false; 
      } 
      else { 
      return true; 
      } 
     } 
    }); 
    if (exitSubmit) { 
     alert("Please enter a valid amount"); 
     return false; 
} 

}

+5

его, потому что вы используете id для цикла, делаете их как класс и пытаетесь выполнить цикл – Greenhorn

+0

Функция, которую вы разместили i недостаточно для остановки сообщения формы. Он просто возвращает true/false, что НЕ НИЧЕГО для пользовательского интерфейса, если вы не захватили событие click правильно, например 'click!'. Пожалуйста, разместите остальную часть кода, в частности, ASPX GridView. – Graham

+0

, показывающий разметку сетки, было бы более удобным, ИМХО. – naveen

ответ

4

Измените сценарий таким образом, чтобы вы нашли флажок и текстовое поле на строке, что вы найти с each() ...

function GetCheckedRows() { 
    $("#flexGridView tr").each(function() { 
     var $checkBox = $(this).find("input[type='checkbox']"); 
     var $textBox = $(this).find("input[type='text']"); 
     if ($checkBox.is(':checked')) { 
      if ($textBox.val().length === 0) { 
       alert("You must specify the amount needed"); 
       return false; 
      } 
      else { 
       return true; 
      } 
     } 
    }); 
} 

Если флажок и текстовое поле есть классы, то было бы разумнее использовать их в селекторах, а не входы (поскольку в каждой строке могут быть другие флажки и текстовые поля - я не знаю).

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

+1

+1: слишком много усилий на такой неопределенный вопрос – naveen

+0

Отлично! Это решило мою проблему, когда я сменил ввод [type = 'textbox'] на текст – derekjs67

+0

Doh !! Какая ошибка школьника с моей стороны. Рад, что это помогло :) – Archer

0

дать вам CheckBoxes класс как flexCheckBox и вы TextBoxesflexTextBox

function GetCheckedRows() { 
    var checkBox = null; 
    var textBox = null; 
    $("#flexGridView tr").each(function() { 
     checkBox = $(this).find(".flexCheckBox"); 
     textBox = $(this).find(".flexTextBox"); 
     if (checkBox.is(':checked')) { 
      if (textBox.val().length === 0) { 
       alert("You must specify the amount needed"); 
       return false; 
      } 
      else { 
       return true; 
      } 
     } 
    }); 
} 
2

Используйте селектор контекста JQuery, чтобы выбрать thec флажок в каждой строке, например:

function GetCheckedRows() { 
$("#flexGridView tr").each(function() { 
var $this = $(this), $checkBox = $("#flexCheckBoxList", $this); 
    if ($checkBox.is(':checked')) { 
     if (textBox.val().length === 0) { 
      alert("You must specify the amount needed"); 
      return false; 
     } 
     else { 
      return true; 
     } 
    } 
}); 

}

Смежные вопросы