Моя функция не будет запускать onclick jquery

#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 это не jQuery

2. Может ли быть так, что 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');
})
  

Я добавил второй класс к своему первому элементу, и он работает!

Спасибо всем, кто пытался мне помочь.