Выбор следующего входа события.target

not необходимо поместить реализацию в файл заголовка, см. альтернативное решение в конце этого ответа.

В любом случае причина, по которой ваш код не работает, что при создании экземпляра шаблона компилятор создает новый класс с заданным аргументом шаблона. Например:

template
struct Foo
{
    T bar;
    void doSomething(T param) {/* do stuff using T */}
};

// somewhere in a .cpp
Foo f; 

При чтении этой строки компилятор создаст новый класс (назовем его FooInt), что эквивалентно следующему:

struct FooInt
{
    int bar;
    void doSomething(int param) {/* do stuff using int */}
}

Следовательно, компилятор должен иметь доступ к реализации методов, чтобы создать экземпляр с аргументом шаблона (в данном случае int). Если эти реализации не были в заголовке, они не были бы доступны, поэтому компилятор не смог бы создать экземпляр шаблона.

Общим решением для этого является запись объявления шаблона в заголовок файла, затем реализовать класс в файле реализации (например, .tpp) и включить этот файл реализации в конец заголовка.

// Foo.h
template 
struct Foo
{
    void doSomething(T param);
};

#include "Foo.tpp"

// Foo.tpp
template 
void Foo::doSomething(T param)
{
    //implementation
}

Таким образом, реализация по-прежнему отделена от объявления, но доступен компилятору.

Другое решение состоит в том, чтобы сохранить реализацию отдельно и явно создать все экземпляры шаблона, которые вам понадобятся:

// Foo.h

// no implementation
template  struct Foo { ... };

//----------------------------------------    
// Foo.cpp

// implementation of Foo's methods

// explicit instantiations
template class Foo;
template class Foo;
// You will only be able to use Foo with int or float

Если мое объяснение isn ' t достаточно ясно, вы можете взглянуть на C ++ Super-FAQ по этому вопросу .

0
задан Serge 16 January 2019 в 10:38
поделиться

1 ответ

Вы можете создать новый объект jQuery из цели события с помощью $(event.target). После этого вы сможете вызвать .next для него

Другое решение без jQuery - использовать нативный DOM API. Вы можете выбрать следующий элемент с помощью nextElementSibling . Единственное требование заключается в том, что элемент, на который вы хотите нацелить , должен быть сразу следующим элементом.

РЕДАКТИРОВАТЬ : Из предоставленной структуры DOM вы можете использовать .parent().next() для выбора следующего элемента на родительском уровне. Затем на этом новом элементе используйте .find(), чтобы выбрать нужный вход. Обратите внимание, что код тесно связан со структурой DOM. Вы можете использовать id для непосредственного выбора элемента.

$(event.target).parent().next().find("input");
0
ответ дан Samuel Vaillant 16 January 2019 в 10:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: