передача локальной переменной функции click

#html #jquery #css #function #var

#HTML #jquery #css #функция #var

Вопрос:

Я хочу передать локальную переменную из одной функции в другую, и я пробовал некоторые решения, но они не сработали, потому что у меня есть функция click, мне нужно сначала поместить переменную, и я не знаю, как это сделать, также я объявил переменную вне функции, но если я используюон вне всех функций, которых у него нет, имеет все свои значения или внутри функции resaltar ничего не появляется, любая помощь приветствуется

     let children=$('div[class^="fila"], div[class^="pieceRow"]' ).children()
    var clase
    $(children).each(function getClass(){
         clase=$(this).attr('class')

    $(clase).on('click', function resaltar(){  

        if (clase==clase) {
            $(this).addClass('shadow')
        }
    })
})
  

это html-код https://jsfiddle.net/qb5fwcus /

Комментарии:

1. возможно, вам захочется изучить ваш интервал для данного кода. в процессе установки у вас возникают некоторые проблемы с вызовами скобок / функций. Самый простой способ — скопировать / вставить код, а затем нажать кнопку «Использовать код» в редакторе, чтобы правильно сделать отступ для форматирования.

2. Я отредактировал код

3. TY для редактирования кода. что именно пытается выполнить код? Вы хотите, чтобы каждый дочерний элемент … что-то делал, но я не могу понять, что именно.

4. Внутри fila у меня есть несколько тегов p, а внутри pieceRow у меня есть несколько img, в этом коде я хотел получить все классы, как p, так и img связаны по имени класса, когда я получаю класс, я должен щелкнуть по любому из p или img, и он и егопара должна выделяться. Спросите, есть ли у вас какие-либо сомнения

5. не могли бы вы поделиться некоторыми примерами HTML?

Ответ №1:

Пожалуйста, попробуйте этот код :

 let children = $('div[class^="fila"], div[class^="pieceRow"]' ).children();

$(children).on('click', function(){
    var clase = $(this).attr('class');
    resaltar(clase);
})
    
function resaltar(clase){  
   $('.shadow').removeClass('shadow');
   $('.'   clase).addClass('shadow');
}
  

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

PS: Дайте мне знать, если я каким-либо образом ошибся 🙂

Комментарии:

1. большое вам спасибо, я добился того, чего хотел, мне нужно было только добавить if (clase == clase) в класс добавления / удаления 🙂

Ответ №2:

Давайте предположим, что вы будете передавать ее в чистую JS-функцию.

 function myFunc() {
   console.log("My function!");
}
  

В вашем «click» вы вызываете функцию «resalter», которую вы также определяете на месте.

Вы хотите вызвать myFunc, поэтому:

 $(clase).on('click', myFunc())
  

Теперь myFunc не ожидает получения переменной. Давайте просто передадим переменную:

 function myFunc(myVar) {
   console.log("Passing a variable of type: "   typeof myVar);
}
  

Теперь ожидается, что вы передадите эту переменную только в вызываемой вами функции. Учитывая предыдущий пример, который я привел, мы имеем:

 let x = 1; // our variable

$(clase).on('click', myFunc(x))
  

Таким образом, вы передаете ‘x’ как переменную типа integer. Используйте этот код в качестве вдохновения, чтобы попытаться достичь своей цели. Немного сложно дать более точный ответ, учитывая, что мы не знаем, какие переменные должны быть переданы какой функции и какова цель.

Удачи!

Комментарии:

1. это не сработает при щелчке, так как myFunc будет немедленно вызвано. ваше второе значение потребует либо использования .bind , либо для myFunc возврата функции