Я пытаюсь сделать мои флажки в GridView более легкими для проверки для пользователя. Я добавил несколько jQuery, чтобы сделать элемент <td>
доступным и установите флажок. Эта часть работает. Проблема в том, что когда пользователь нажимает фактический флажок, он не будет проверять. Когда я отлаживаю свой код, кажется, что .is (": checked") неверно возвращается. Любая помощь будет оценена.Флажок ASP.NET не проверяется с помощью jQuery
Мои GridView ItemTemplate
<asp:TemplateField HeaderText="Select" ItemStyle-Width ="5%"
ItemStyle-HorizontalAlign="Center" ItemStyle-CssClass="chk" >
<ItemTemplate>
<asp:CheckBox id="chkBxPSelect" runat="server" />
</ItemTemplate>
</asp:TemplateField>
Я также попытался обертывание флажок в метке, а также якорный тег, а не дало никаких результатов.
<asp:TemplateField HeaderText="Select" ItemStyle-Width ="5%" ItemStyle-HorizontalAlign="Center" ItemStyle-CssClass="chk" >
<ItemTemplate>
<label style="display:block;">
<asp:CheckBox ID="chkBxPSelect" runat="server" />
</label>
</ItemTemplate>
Мой JQuery
$(".chk").click(function (e)
{
var checkBox = $(this).find("input:checkbox:first");
if (checkBox.is(":checked"))
{
checkBox.prop("checked", false);
}
else
{
checkBox.prop("checked", true);
}
});
Любые идеи?
EDIT Я также попытался добавить к нему флажок. Кажется, что проверка того, что флажок установлен, с помощью `.is (": checked "), не сообщает о правильном состоянии флажка.
$('input[id$="chkBxPSelect"]').click(function()
{
if ($(this).is(":checked"))
{
$(this).prop("checked", false);
}
else
{
$(this).prop("checked", true);
}
});
И Я попробовал это также из предложения ниже.
$('input[id$="chkBxPSelect"]').click(function()
{
e.preventDefault();
//e.stopPropagation();
});
и по-прежнему галочка не будет проверяться при нажатии на фактический флажок.
ли ".chk" ваш класс флажок? если да, то почему вы пытаетесь найти еще один флажок ?, используя $ (this), должен предоставить вам фактический экземпляр (щелчок по нему), тогда вы можете получить его значение usin $ (this) .val() – kondas
Что это за класс ".chk"? –
.chk - это класс, который я добавил в ItemTemplate. Он находится в коде выше. Я использую его в CSS для изменения курсора на указатель, а также для jQuery для доступа к отображаемому элементу '
ответ
Это может работать:
Я не уверен, нужно ли вам
preventDefault
илиstopPropagation
, но я считаю, что этоstopPropagation
предотвратить флажокclick
от барботирования до своего родителяtd
.Другим возможным решением было бы это. Если он работает, я бы рекомендовал его, так как он не требует какого-либо сценария:
Когда флажок обернут внутри
<label>
элемента, щелкнув что-нибудь внутри этого ярлык будет переключать состояние проверяется CheckBox в. Предоставляя ярлыку отображение: стиль блока, этот должен занять все пространство ячейки таблицы (td), которое находится внутри. Таким образом, щелчок в любом месте td должен в threory переключить этот флажок.источник
2015-02-27 14:34:41 danludwig
Я пробовал оба и ни один не работал. Селектор кажется хорошим, но, как я уже говорил выше (в моем отредактированном вопросе), .is («: checked») не сообщает о правильном состоянии флажка независимо от того, будет ли он проверен или нет. – Trucktech
Я ответил на свой вопрос с вашей помощью. Вы, конечно, поставили меня на правильный путь, чтобы получить кредит. Спасибо. – Trucktech
Update: Вы могли бы выполнить свою задачу таким образом, то:
Добавляя элемент класса, это даст Jquery что-то якорь на. Тогда вы могли бы сделать:
Итак, когда вы щелкаете ваш
td
JQuery будет выполняться, как и для нахождения вашего входа, вы дали ему идентификатор класса, который отражает ваш идентификатор. Итак, вы используетеfind
для поиска дочерних элементов в пределахtd element
. Это должно найти ваш вход, тогда вы просто сделаете свой чек с помощьюvar
, который установил флажок.Вы могли бы по существу сделать следующее, которое обеспечит захват вашего контроля.
Если
$(this)
не работает использовать полный идентификатор, как указано выше, но оценка Microsoft должна решить проблему. Ваш другой подход в JavaScript будет:Я считаю, что это тоже должно сделать трюк. Вы можете протестировать его, но я бы использовал первый подход с веб-формами.
источник
2015-02-26 23:06:32 Greg
Я действительно пытаюсь сделать обработанный элемент '
@Trucktech Попробуйте мой обновленный ответ, так как вы пытаетесь использовать 'td', который я не видел, когда я отвечал. – Greg
У меня это выяснено с помощью @danludwig. Мне нужно было добавить обработчик кликов к флажку AND и e.stopPropagation(), чтобы предотвратить событие от пузырьков до td. Мне также пришлось обернуть флажок в теге метки и добавить к нему флажок CssClass, чтобы сделать его проще.
My new checkbox.
Мои новые методы JQuery:
источник
2015-02-27 15:47:47 Trucktech
Вы должны использовать 'find', а не' children'. 'children' выходит только на глубину слоя, где' find' будет искать все элементы. Веб-формы могут генерировать больше элементов, которые не знают о том, что может заставить его не работать. – Greg
В документах [здесь] (http://api.jquery.com/children/). «Получить дочерние элементы каждого элемента в наборе согласованных элементов, необязательно отфильтрованных селектором». Таким образом, он фактически получает ВСЕ детей, если вы не укажете фильтр. Селектор, который я указал «input: checkbox: first', получит первый вход, который является флажком и помещает его в мой объект. Эта часть всегда работала.Это просто проверка фактического флажка, а не '
Он получает только один уровень, поэтому он получит всех детей уровня корня. Если вам нужно идти глубже, вам нужно найти. – Greg
Смежные вопросы