Wiem, że jest to naprawdę podstawowy JavaScript, ale z jakiegoś powodu nie mogę uzyskać funkcji My Link's Onclick do pracy podczas przechodzenia parametru.

Próbowałem uciekać z cytatów, dodając różne typy cytatów i dodawanie zmiennej surowej jako łańcucha.

Pracuję z poniższym, ale mówi, że "XYZ jest niezdefiniowany"

function renderLink(value, meta, record)
        {
            var type = record.data['name']; //value is XYZ  


            return '<a href="javascript:void(0);" onclick="getReport('+type+'); return false;"></a>';
        }

function getReport(type){

    alert(type);
}
6
pm13 21 październik 2011, 17:27

3 odpowiedzi

Najlepsza odpowiedź
return '<a href="javascript:void(0);" onclick="getReport('+type+'); return false;"></a>';

Musisz uciec od ciągów:

return '<a href="javascript:void(0);" onclick="getReport(\''+type+'\'); return false;"></a>';
10
Joe 21 październik 2011, 13:29

Jeśli spojrzysz na renderowanego HTML, zobaczysz problem: Twój telefon getReport wygląda tak:

getReport(XYZ);

Zgaduję, że chcesz wokół tego, więc:

return '<a href="javascript:void(0);" onclick="getReport(\''+type+'\'); return false;"></a>';

... co sprawia:

getReport('XYZ');

Przykład na żywo

Nieco bardziej ezoteryczne, ale po wyjściu atrybutu onclick jako część źródła HTML jest oczywiście atrybut HTML, co oznacza, że można użyć podmiotów znaków. Więc możesz , możesz użyć podmiotu {X1}}:

return '<a href="javascript:void(0);" onclick="getReport(&quot;'+type+'&quot;); return false;"></a>';

Przykład na żywo

Wskazuję to, że nie dlatego, że polecam (nie), ale dlatego, że warto pamiętać, co naprawdę dzieje się w atrybucie onclick. Jest to jeden z powodów, dla których zdecydowanie zalecam użycie właściwego przewodnika zdarzeń (np. Przez addEventListener / attachEvent, a nawet po prostu przypisanie do a element {X4}} {X4}} Zamiast tego został utworzony.


Ważne jest, aby pamiętać, że ten sposób działania jest również bardzo wrażliwy na zawartość record.data['name']. Na przykład, rozważ, co się stanie, jeśli zamiast XYZ to Tom's. Wyjście pierwszej opcji byłoby

getReport('Tom's');

... co jest oczywiście problemem. Podobnie, jeśli w tekście jest odwrotny ukośnik, będzie traktowany jako znak ucieczki na wynik, etc. itd. - trochę minuły.

Jeśli możesz zmienić swój renderLink, więc zwróci rzeczywistą instancję a, a nie ciąg, to właśnie zrobiłbym:

function createLink(value, meta, record)
{
    var type = record.data['name'];         // Grab value as of when we were called
    var link = document.createElement('a');

    link.href = "javascript:void(0);";
    link.onclick = function() {             // Or even better, addEventListener / attachEvent
        getReport(type);
        return false;
    };

    return link;
}

Który tworzy link i zamknięcie , które uzyskują dostęp type bez przekształcenia go w tekst i ponownie. (Nie martw się, jeśli jesteś nieznany z zamknięciami, Zamknięcia są nie skomplikowany.)

Przykład na żywo

2
T.J. Crowder 21 październik 2011, 13:55

GetReport otrzymuje XYZ jako zmienną, a nie jako łańcuch, musisz umieścić to wewnątrz cytatów:

return '<a href="javascript:void(0);" onclick="getReport(\''+type+'\'); return false;"></a>';
0
mck89 21 październik 2011, 13:30