Функция jQuery внутри каждого возвращает значение только из последнего элемента

#jquery #function #parameters #each

#jquery #функция #параметры #каждый

Вопрос:

Я пытаюсь передать текстовые значения html-элементов с определенным классом в качестве параметра функции внутри каждой функции.

На выходе возвращается только последнее переданное текстовое значение.

Я хотел бы присвоить каждое текстовое значение функции, содержащейся в элементе рядом с ним, чтобы она возвращала значение в качестве параметра для функции каждого отдельного блока html-кода.

Код jQuery :

 $(".optin-holder").each(function(index,obj) {   

    $(this).html("<div class='contentOptin'>"    new Optin($(this).next().text())   "</div><br/><br/>");

  //$(this).html("<div class='contentOptin'>"   $(this).next().text()   "</div><br/><br/>");                                        

}); 

function Optin(promoNumber){    

var promo = promoNumber;

var content = '<input onclick="javascript:saveActivity(' promo ')"  type="button" name="logOptin" value="PARTICIPAR" class="btn btnParticipate" />';

$(".contentOptin").html(content);

}
  

HTML :

 <div class="offerBoxAll">
    <div class="optin-holder">
        <div class="contentOptin">
            <input class="btn btnParticipate"  onclick="javascript:saveActivity(1284)" name="logOptin" value="PARTICIPAR" type="button">
        </div>
    </div>
<div class="test">1283</div>
</div>


<div class="offerBoxAll">
    <div class="optin-holder">
            <div class="contentOptin">
                <input class="btn btnParticipate" onclick="javascript:saveActivity(1284)" name="logOptin" value="PARTICIPAR" type="button">
            </div>
    </div>
    <div class="test">1284</div>
</div>
  

Как вы можете видеть, она передает только последнее значение на каждую итерацию.

Мне нужно передать значение .test класса прямо рядом с каждым .contentOptin классом.

Прокомментированная строка дает мне значение, которое мне нужно для каждой итерации, но не находится внутри функции в качестве параметра. Optin(param) Функция добавляет некоторый код, который передает значение текста .test класса в saveActivity(param) функцию в качестве параметра внутри элемента с .contentOptin классом.

пример jsfiddle

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

1. На самом деле не могу воспроизвести это -> jsfiddle.net/adeneo/zym4gsrp

2. пример jsfiddle

Ответ №1:

Замените $(this).next().text() на $(this).find(".test").text() .

$(this).find(".test").text() найдет значение div наличия test класса для каждого optin-holder div .

Изменение Js

 $(".optin-holder").each(function(index,obj) {                               
    $(this).html("<div class='contentOptin'>"   Optin($(this).find(".test").text())   "</div><br/><br/>");
    // $(this).html("<div class='contentOptin'>"   $(this).next().text()   "</div><br/><br/>");                                     

});
  

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

1. Извините, я неправильно ввел HTML-код, теперь правильный, в котором элемент с class .test не является потомком элемента с class .optin-holder, поэтому я не могу использовать функцию поиска из jQuery. Возможно, вы можете придумать другое решение. В любом случае спасибо.

Ответ №2:

Повторите элемент со значением внутри функции и задайте условный оператор внутри ‘each’, чтобы проверить, равно ли заданное значение для этого элемента аргументу, переданному функции. jsfiddle.net/puzzledGalore/6sy7badn/