#javascript #jquery #asp.net-mvc #kendo-grid
#javascript #jquery #asp.net-mvc #kendo-grid
Вопрос:
У меня есть asp.net kendo grid и внутри меня есть элемент с классом. Я хочу заменить этот класс другим, нажав на ссылку, которую я разместил справа.
Итак, я использовал jquery для этого, но, похоже, он не работает .. и внутри консоли Chrome я не получаю никакой ошибки. Я пытался поставить оповещение, но оно не запускается.
Если кто-то может помочь, вот мой jquery
function changetoOK() {
grid.tbody.find("td").onclick(function (index) {
if ($("a").hasClass('changeToOk'))
{
$(this).removeClass('customClassVerif');
$(this).addClass('customClassOK');
}
});
}
также я добавляю для создания поддельной ссылки html-помощник, чтобы поместить ее в мою сетку, поэтому у меня есть это в сетке :
columns.Template(@<text></text>).ClientTemplate(@Html.EmptyLink("Passer à OK").ToHtmlString());
и это в классе
public static class MyHtmlExtensions
{
public static MvcHtmlString EmptyLink(this HtmlHelper helper, string linkText)
{
var tag = new TagBuilder("a");
tag.MergeAttribute("class", "changeToOK");
tag.MergeAttribute("href", "javascript:void(0);");
tag.SetInnerText(linkText);
return MvcHtmlString.Create(tag.ToString());
}
}
[РЕДАКТИРОВАТЬ]
Я думаю, это было бы полезно знать. Сначала я внес некоторые изменения в свой код, и вот некоторое объяснение.
У меня есть элемент внутри сетки с классом, и я хочу, чтобы этот класс менялся на другой, когда я нажимаю на свою ссылку.
Комментарии:
1.
grid.tbody.find("td").onclick
это не jQuery2. Может ли быть так, что
grid
и / илиtbody
в приведенном выше коде не являются объектами jQuery? Методы jQuery, в данном случае.find()
, могут вызываться только для объектов jQuery. Далее ваш$("a")
возвращает коллекцию всех элементов привязки в документе, но вам, я думаю, нужен конкретный.
Ответ №1:
Я думаю, проблема в том, что вы пытаетесь использовать метод ‘onclick’, который не работает в jQuery.
Попробуйте использовать .on(‘click’, функция (индекс) …
Ответ №2:
.onclick не является методом jquery, попробуйте вместо этого .click, вот так:
function changetoOK() {
grid.tbody.find("td").click(function (index) {
if ($("a").hasClass('changeToOk'))
{
$(this).removeClass('changeToOk');
$(this).addClass('customClassOK');
}
});
}
Это привяжет событие click к td
элементам, хотя имейте в виду, что вся предоставленная вами функция будет выполнять поиск всех a
элементов и проверять, есть ли у какого-либо из них класс changeToOk
. Единственная причина, по которой я упоминаю об этом, заключается в том, что вы присваиваете функции click индекс, который затем никогда не используется.
Комментарии:
1. Да, я думаю, я что-то пропустил. На самом деле я хочу вот чего: когда я нажимаю на элемент a внутри td в сетке, я хочу, чтобы другой элемент td сетки получал класс customClassOK, удаляя класс customClassVerif (я внес правку в свой пост)
2. Итак, вы говорите, что хотите щелкнуть элемент a, который случайно находится внутри элемента td в сетке, который затем удалит customClassVerif из другого td и заменит класс на customClassOk?
3. Да, это именно то, что я хочу, другой td также находится внутри сетки
Ответ №3:
This will work as expected :
function changetoOK() {
grid.tbody.find("td").on('click', function (event) {
if ($("a").hasClass('changeToOk'))
{
$(this).removeClass('changeToOk');
$(this).addClass('customClassOK');
}
});
}
Комментарии:
1. Она не работает даже для того, что должна была делать. Но я внес небольшие изменения в то, что мне нужно сделать в моем сообщении, также в комментарии ниже ответа DibsyJr
2. Может ли быть так, что
grid
и / илиtbody
в приведенном выше коде не являются объектами jQuery? Методы jQuery, в данном случае.find()
, могут вызываться только для объектов jQuery.
Ответ №4:
Итак, для всех, кто хочет сделать то же самое, что и я, наконец, узнайте, как это сделать.
Все, что вам нужно сделать, это :
$(document).on('click', '.changeToOK', function () {
$(this).parent().parent().find('.verifyCell').removeClass('customClassVerif').addClass('customClassOK');
})
Я добавил второй класс к своему первому элементу, и он работает!
Спасибо всем, кто пытался мне помочь.