Chciałbym wykonać pewien rodzaj logiki dla każdego przedmiotu z daną klasą (kod jest ponownie wykorzystany, dlatego, dlaczego nie pracuję z ID): elementy są w tym samym Div wszędzie:

<div id="mDiv>
<input type="text" class = "class1>
<input type="hidden"/>
</div>

A skrypt jest czymś takim:

    $(".class1").val(calcDefaultDate())

    function calcDefaultDate(){
        var currDate = $(this).siblings('input[type=hidden]').val();
        if (currDate == "") {
            return new Date();
        }
        return currDate;
    }

Problem polega na tym, że w ten sposób $ (to) jest oknem zamiast elementu z klasy1, jestem dość nowy w JavaScript, więc może to być coś naprawdę łatwe, ale jak powinno być obsługiwane?

Dzięki!

0
erik.c 15 sierpień 2014, 15:29

4 odpowiedzi

Najlepsza odpowiedź

Jesteś bardzo blisko, wystarczy zdać od referencji funkcji

$(".class1").val(calcDefaultDate); //Notice removed ()

Po użyciu () jest funkcją dzwoniącym.

PRÓBNY

2
Satpal 15 sierpień 2014, 11:37

Możesz spróbować podać elementu jako argument zamiast próbować dotrzeć do niego ze słowem kluczowym this:

$(".class1").val(calcDefaultDate($(".class1")))

function calcDefaultDate($element){
    var currDate = element.siblings('input[type=hidden]').val();
    if (currDate == "") {
        return new Date();
    }
    return currDate;
}

Przy okazji, może preferowałbyś return new Date(+currDate); zamiast return currDate;, w ten sposób rodzaj tego, co twoje zwroty funkcji jest bardziej spójne.

1
Volune 15 sierpień 2014, 11:36

Musi istnieć pewna zmiana wdrażania.

Zrób to jak poniżej

$(".class1").each(function(){
    var currDate = $(this).siblings('input[type=hidden]').val();
    if (currDate == "") {
        $(this).val(new Date());
    }
 else
    $(this).val(currDate);
});

PRÓBNY

1
Mritunjay 15 sierpień 2014, 11:38

Spróbuj przekazywać div jako argument do swojej funkcji:

$(".class1").each(function() {
    $(this).val(calcDefaultDate($(this)));
});

function calcDefaultDate(el) {
    var currDate = $(el).siblings('input[type=hidden]').val();
    if (currDate == "") {
        return new Date();
    }
    return currDate;
}

Lub zastosuj funkcję do każdego elementu:

$(".class1").each(function() {
    updateDefaultDate($(this));
});

function updateDefaultDate(el) {
    var currDate = $(el).siblings('input[type=hidden]').val();
    if (currDate == "") {
        currDate = new Date();
    }
    el.val(currDate);
}

Lub przejdź wszystkie elementy do swojej funkcji:

updateDefaultDate($(".class1"));

function updateDefaultDate(elements) {
    $(elements).each(function() {
        var currDate = $(this).siblings('input[type=hidden]').val();
        if (currDate == "") {
            currDate = new Date();
        }
        $(this).val(currDate);
    });
}
1
Thomas 15 sierpień 2014, 11:41