przekazać parametr ciągu w funkcji onclick


225

Chciałbym przekazać parametr (tj. Ciąg) do funkcji Onclick. Na razie robię to:

'<input type="button" onClick="gotoNode(' + result.name + ')" />'

z wynikiem.nazwa na przykład równym ciągowi „Dodaj”. Po kliknięciu tego przycisku pojawia się błąd, który mówi, że Add nie jest zdefiniowany. Ponieważ to wywołanie funkcji działa idealnie z parametrem numerycznym, zakładam, że ma to coś wspólnego z symbolami „” w ciągu. Czy ktoś miał wcześniej ten problem?


1
W tym przypadku może być lepiej po prostu nie używać wbudowanych procedur obsługi zdarzeń.
— Felix Kling

1
Twój problem wynika z niepoprawnego zmiany znaczenia zmiennej. Sprawdź moją odpowiedź
— Starx,

Odpowiedzi:


351

Wygląda na to, że budujesz elementy DOM z ciągów. Musisz tylko dodać cytaty wokół wyników. Nazwa:

'<input type="button" onClick="gotoNode(\'' + result.name + '\')" />'

Powinieneś naprawdę robić to za pomocą odpowiednich metod DOM.

var inputElement = document.createElement('input');
inputElement.type = "button"
inputElement.addEventListener('click', function(){
    gotoNode(result.name);
});

​document.body.appendChild(inputElement);​

Pamiętaj tylko, że jeśli jest to pętla lub coś, resultzmieni się przed uruchomieniem zdarzenia i musisz utworzyć dodatkowy bąbelek zasięgu, aby ukryć zmienną zmienną.


7
To formatowanie symboli działa, więc bardzo dziękuję
— JasperTack

2
Cześć @ David .. Mam jedną wątpliwość ... Chcę przekazać wiele argumentów w tym kliknięciu. Jak to możliwe? czy możesz mi się przydać ..?
— VIVEK-MDU

2
@ David, dzięki rozwiązał problem z moim parametrem ciągu, ale teraz muszę przekazać (ciąg, wartość logiczna). co z tym zrobić?
— Zaveed Abbasi

1
Dzięki, naprawdę mi pomogło :)
— Hitesh

2
@ David: czy możesz powiedzieć trochę, dlaczego musimy dodać cytat wokół tego
— Hitesh

34

Kilka obaw dotyczących używania ciągu znaków ucieczki w onClick i wraz ze wzrostem liczby argumentów, utrzymanie się będzie kłopotliwe.

Poniższe podejście będzie miało jeden przeskok - Po kliknięciu - przejmij kontrolę do metody modułu obsługi, a metoda modułu obsługi, w oparciu o obiekt zdarzenia, może odjąć zdarzenie kliknięcia i odpowiedni obiekt.

Zapewnia również czystszy sposób dodawania większej liczby argumentów i większej elastyczności.

<button type="button" 
        className="btn btn-default" 
        onClick="invoke" 
        name='gotoNode' 
        data-arg1='1234'>GotoNode</button>

Na warstwie javascript:

  invoke = (event) => {
    let nameOfFunction = this[event.target.name];
    let arg1 = event.target.getAttribute('data-arg1');
    //We can add more args as needed...
    window[nameOfFunction](arg1) 
    //hope function is in window. 
    //Else the respective object need to be used 
    })
  }

Zaletą jest to, że możemy mieć tyle argumentów (w powyższym przykładzie, dane-arg1, dane-arg2 ....), ile potrzeba.


2
Dziwię się, że to nie zyskuje więcej głosów pozytywnych, ponieważ jest to czystsza metoda przekazywania argumentów do modułu obsługi zdarzeń.
— Tim O'Brien

To nie działa, invokenie jest wywoływane po kliknięciu przycisku
— tanguy_k

Świetne rozwiązanie! Jeśli chcesz przekazać tablice lub obiekty, po prostu użyj JSON.stringify(obj)w JSON.parse(event.target.getAttribute('data-arg'))
— kodzie

@SairamKrish W moim przypadku, jeśli kliknę przycisk, ustawiłem wyświetlanie identyfikatora, zrzut ekranu: snag.gy/7bzEWN.jpg kod: pastiebin.com/5d35674e2fc31
— Gem

Może to działać, ale jest to zawiła, nietypowa implementacja, która byłaby trudna do naśladowania dla innego programisty, który musiałby to utrzymać.
— Spencer Sullivan

24

Sugeruję nawet, aby nie używać programów onclickobsługi HTML i używać czegoś bardziej powszechnego, takiego jak document.getElementById.

HTML:

<input type="button" id="nodeGoto" />

JavaScript:

document.getElementById("nodeGoto").addEventListener("click", function() {
    gotoNode(result.name);
}, false);

onclicknie jest funkcją, jest to właściwość, do której należy przypisać funkcję:....onclick = function() {...};
— Felix Kling

@FelixKling Dzięki za to, moja głowa wciąż jest w trybie jQuery.
— kevinji,

4
Zakładasz, że będzie tylko jedno z tych danych wejściowych.
— Madbreaks

Cóż, pytanie PO oznacza, że ​​będzie tylko jeden wkład.
— kevinji,

Myślę, że ta opcja nie działa dla mnie, ponieważ generuję wiele przycisków w wyniku operacji wyszukiwania. Mógłbym to rozwiązać za pomocą licznika, aby dodać do identyfikatora, ale chcę, aby było to proste i utrzymywać w linii
— JasperTack

21

Zgaduję, że tworzysz przycisk za pomocą samego JavaScript. Zatem błąd w kodzie polega na tym, że zostanie wyświetlony w tej formie

<input type="button" onClick="gotoNode(add)" />'

W tym obecnym stanie addbędzie uważany za identyfikator, taki jak zmienne lub wywołania funkcji. Powinieneś uciec przed taką wartością

'<input type="button" onClick="gotoNode(\'' + result.name + '\')" />'

16

Jest to miły i schludny sposób przesyłania wartości lub obiektu.

<!DOCTYPE html>
<html>
<body>
<h1  onclick="test('wow',this)">Click on this text!</h1>
<script>
var test =function(value,object){  
object.innerHTML=value;
};     
</script>
</body>
</html>

8

Spróbuj tego..

HTML:

<button id="a1" type="button" onclick="return a1_onclick('a1')">a1</button> 

JavaScript:

<script language="javascript" type="text/javascript">
    function a1_onclick(id) {
        document.getElementById(id).style.backgroundColor = "#F00";   
    }
</script>

Uwaga: pamiętaj o wysyłaniu argumentów między znakami „”, takimi jak („a1”) w kodzie HTML


dzięki!! szukałem tego problemu od kilku godzin
— cweitat

Czy ktoś pomaga? W moim przypadku, jeśli kliknę przycisk, ustawiłem wyświetlanie identyfikatora, zrzut ekranu: snag.gy/7bzEWN.jpg kod: pastiebin.com/5d35674e2fc31
— Gem

6

również używasz poważnego symbolu akcentu (`) w ciągu

próbować :

`<input type="button" onClick="gotoNode('${result.name}')" />`

Aby uzyskać więcej informacji, odwiedź MDN i Stackoverflow

Obsługuje Chrome, Edge, Firefox (Gecko), Opera, Safari, ale nie obsługuje Internet Explorera.


6

jeśli przycisk jest generowany dynamicznie:

Możesz przekazać parametry ciągu do funkcji javascript, takich jak poniższy kod:

Przekazałem 3 parametry, przy czym trzeci to parametr łańcuchowy, mam nadzieję, że to pomoże.

var btn ="<input type='button' onclick='RoomIsReadyFunc("+ID+","+RefId+",\""+YourString+"\");'  value='Room is Ready' />";

//your javascript function

function RoomIsReadyFunc(ID, RefId, YourString)
{
  alert(ID);
  alert(RefId);
  alert(YourString);
}

1
Ładnie, czysto i prosto. Dzięki

5

Edytowane: Jeśli wymagane jest odwołanie do obiektu globalnego (js) w kodzie HTML, możesz spróbować. [Nie używaj cudzysłowów („lub”) wokół zmiennej]

SkrzypceOdniesienie do .

JavaScript:

var result = {name: 'hello'};
function gotoNode(name) {
    alert(name);
}

HTML:

<input value="Hello" type="button" onClick="gotoNode(result.name)" />​

Gdy próbuję tego rozwiązania, pojawia się błąd: część „+ wynik.nazwa +” jest w tym przypadku używana jako ciąg znaków
— JasperTack

czym jest obiekt „wynikowy”? Czy jest to zmienna globalna zadeklarowana w JS? jak ... var result = {name: 'javascript'};
— Sandeep GB

wynik zawiera zapis z biblioteki jowl: struktura json z atrybutami nazwa, typ, ...
— JasperTack

Jaspack, zaktualizowałem odpowiedź. Czy to działa teraz dla ciebie?
— Sandeep GB

Dziękuję za przykład, ale to nie działa w moim przypadku: zmienna wynikowa nie jest globalna, ale jest zmienną w ramach procedury. Kiedy więc wywołuję funkcję z wynikiem.nazwa, wynik nie jest znany
— JasperTack

4

Wiele parametrów:

   bounds.extend(marker.position);
        bindInfoWindow(marker, map, infowindow,
     '<b>' + response[i].driver_name + '</b><br>' + 
     '<b>' +moment(response[i].updated_at).fromNow() + '</b>
      <button onclick="myFunction(\''+response[i].id+'\',\''+driversList+'\')">Click   me</button>'
    );

2

Aby przekazać wiele parametrów, możesz rzutować ciąg, łącząc go z wartością ASCII, np. W przypadku pojedynczych cudzysłowów możemy użyć „

var str= "&#39;"+ str+ "&#39;";

2

Oto rozwiązanie Jquery, którego używam.

Jquery

$("#slideshow button").click(function(){
    var val = $(this).val();
    console.log(val);
});

HTML

<div id="slideshow">
    <img src="image1.jpg">
    <button class="left" value="back">&#10094;</button>
    <button class="right" value="next">&#10095;</button>
</div>

1

Możesz przekazać odwołanie lub wartość ciągu, po prostu wstaw funkcję w asp asp "" poniżej migawki

wprowadź opis zdjęcia tutaj


0

Do przekazywania wielu parametrów można rzutować ciąg, łącząc go z wartością ASCII, np. W przypadku pojedynczych cudzysłowów możemy użyć &#39;

var str= "&#39;"+ str+ "&#39;";

ten sam parametr, który można przekazać do onclick()zdarzenia. W większości przypadków działa z każdą przeglądarką.


0

czy użyć do wygenerowania zestawu przycisków o różnych parametrach obsługi. https://www.w3schools.com/js/js_function_closures.asp

let some_button = document.createElement( "button" );
some_button.type = "button";

some_button.onclick = doWithParam( some_param );

function doWithParam( param ){
   return function(){
      alert( param );//<------Your code here
   }
}

Jeśli zrobimy:

some_button.onclick = foo( some_param );
function foo( param ){
    alert( param );
}

następnie funkcja foo start po każdej stronie aktualizacji.

Jeśli zrobimy:

for( let i = 0; i < 10; ++i ){
    var inputElement = document.createElement('input');
    inputElement.type = "button"
    inputElement.addEventListener('click', function(){
        gotoNode(result.name);
    });

​   document.body.appendChild(inputElement);​
}

następnie dla wszystkich przycisków utworzonych w pętli ostatnia wartość parametru „wynik.nazwa”


0

jeśli używasz asp, możesz użyć javascript:

HTML:

<input type='button' value='test' onclick='javascript: EditSelectedOptionName(x,y)' />"

JavaScript:

function EditSelectedOptionName(id, name) {
        console.log(id);
        console.log(name);
 }

0

Jeśli dodajesz przycisk lub link dynamicznie i napotykasz problem, może to być pomocne. Rozwiązałem w ten sposób.

var link= $(contentData1[i]).find("td:first font b a").attr("href",'javascript:onClick=openWin(\'' + tdText + '\')');

Jestem nowy w HTML, JQuery i JS. Być może mój kod nie będzie zoptymalizowany ani nie będzie składni, ale działał dla mnie.



0

Możesz tego użyć,

'<input id="test" type="button" value="' + result.name + '" />'

$(document)..on('click', "#test", function () {
        alert($(this).val());
});

to dla mnie praca


-1
    <style type="text/css">
        #userprofile{
              display: inline-block;
              padding: 15px 25px;
              font-size: 24px;
              cursor: pointer;
              text-align: center;
              text-decoration: none;
              outline: none;
              color: #fff;
              background-color: #4CAF50; //#c32836
              border: none;
              border-radius: 15px;
              box-shadow: 0 9px #999;
              width: 200px;
              margin-bottom: 15px;

        }
        #userprofile:hover {
            background-color: #3e8e41
        }
        #userprofile:active {
              background-color: #3e8e41;
              box-shadow: 0 5px #666;
              transform: translateY(4px);
        }
        #array {
                border-radius: 15px 50px;
                background: #4a21ad;
                padding: 20px;
                width: 200px;
                height: 900px;
                overflow-y: auto;
            }

    </style>
if(data[i].socketid!=""){
$("#array").append("<button type='button'  id='userprofile' class='green_button' name="+data[i]._id+" onClick='chatopen(name)'>"+data[i].username+"</button></br>");                    
                }else{
                    console.log('null socketid  >>', $("#userprofile").css('background-color')); 
                    //$("#userprofile").css('background-color','#c32836 ! important');


$("#array").append("<button type='button'  id='userprofile' class='red_button' name="+data[i]._id+" onClick='chatopen(name)'>"+data[i].username+"</button></br>");  
                $(".red_button").css('background-color','#c32836');             
                }

Proszę wyjaśnić swój kod, ta odpowiedź sama w sobie nie jest przydatna
— Phil Hudson

-1

Poniższe działa dla mnie bardzo dobrze,

<html>
<head>
    <title>HTML Form</title>
</head>
<body>
    <form>
        <input type="button" value="ON" onclick="msg('ON')">
        <input type="button" value="OFF" onclick="msg('OFF')">
    </form>
    <script>
        function msg(x){
            alert(x);
        }
    </script>
</body>
</html>

1
OP nie pyta o stałą wartość. To nie odpowiada na pytanie.
— RubioRic

-1

Możesz użyć tego kodu w metodzie przycisku onclick:

<button class="btn btn-danger" onclick="cancelEmployee(\''+cancelButtonID+'\')" > Cancel </button>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.