Apa artinya "javascript: void (0)"?


1379
<a href="javascript:void(0)" id="loginlink">login</a>

Saya telah melihat hrefitu berkali-kali, tetapi saya tidak tahu apa artinya itu.


12
javascript:adalah salah satu dari banyak skema URI: en.wikipedia.org/wiki/URI_scheme , seperti data:.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

3
Anda dapat menggunakan hanya href="javascript:"untuk tujuan yang sama. Seperti yang dinyatakan dalam jawaban untuk pertanyaan ini , void(0)bagian awalnya ditujukan untuk versi awal browser di mana javascript:penanganan URI berbeda. Tapi sekarang saya bahkan tidak bisa menemukan versi di mana steno tidak berfungsi, setidaknya IE7 menangani ini dengan benar.
pengguna

1
Saya juga melihat href = "javascript: //", apakah ini lebih baik?
lightsaber

href = "javascript: //" tidak berfungsi untuk saya, void (0) berfungsi dengan baik.
sandip

Jawaban:


1041

The voidOperator mengevaluasi ekspresi yang diberikan dan kembali kemudian undefined.

The voidOperator sering digunakan semata-mata untuk mendapatkan undefinednilai primitif, biasanya menggunakan “ void(0)” (yang setara dengan “ void 0”). Dalam kasus ini, variabel global undefined dapat digunakan sebagai gantinya (dengan asumsi itu belum ditetapkan ke nilai non-default).

Penjelasan diberikan di sini: voidoperator .

Alasan Anda ingin melakukan ini dengan hreftautan adalah karena biasanya, javascript:URL akan mengarahkan ulang browser ke versi teks biasa dari hasil mengevaluasi JavaScript itu. Tetapi jika hasilnya undefined, maka browser tetap berada pada halaman yang sama. void(0)hanyalah skrip pendek dan sederhana yang dievaluasi untuk undefined.


9
apa artinya ketika href diberi "nilai primitif tidak terdefinisi"?
omg

7
"Biasanya javascript: url akan mengarahkan browser ke versi teks biasa dari hasil mengevaluasi javascript itu." Bisakah Anda membuat contoh di sini? Saya belum pernah melihat penggunaan seperti itu.
omg

87
Contoh dari apa yang dibicarakan phoenix adalah <a href="javascript: dosomething();"> LAKUKAN SEKARANG! </a>. Jika dosomething mengembalikan false, maka mengklik tautan hanya akan menyebabkan browser keluar dari halaman dan menampilkan "false". Namun ... <a href="javascript: dosomething(); void(0)"> LAKUKAN SEKARANG! </a> menghindari masalah. Silakan tempelkan javascript: 1 +1; ke bilah alamat browser Anda. Peramban akan menampilkan "2"
Breton

9
Karena void adalah operator unary. Void bukan nilai, juga bukan fungsi. Perlu nilai untuk beroperasi di sebelah kanannya, atau akan menimbulkan kesalahan.
Breton

14
coba cari di konsol kesalahan? Itu pasti melempar kesalahan sintaks. Ini javascript yang tidak valid. Douglas crockford merekomendasikan untuk menjauh dari kekosongan karena kebingungan operator / fungsi / nilai yang terlalu mahal untuk ditangani.
Breton

436

Selain jawaban teknis, javascript:voidberarti penulis melakukan Doing It Wrong.

Tidak ada alasan bagus untuk menggunakan javascript:pseudo-URL (*). Dalam praktiknya itu akan menyebabkan kebingungan atau kesalahan jika ada orang yang mencoba hal-hal seperti 'tautan bookmark', 'tautan terbuka di tab baru', dan sebagainya. Ini terjadi cukup banyak sekarang orang sudah terbiasa dengan klik-tengah-untuk-tab baru: sepertinya sebuah tautan, Anda ingin membacanya di tab baru, tetapi ternyata itu bukan tautan yang sebenarnya sama sekali, dan memberikan hasil yang tidak diinginkan seperti halaman kosong atau kesalahan JS ketika diklik tengah.

<a href="#">adalah alternatif umum yang bisa dibilang tidak terlalu buruk. Namun Anda harus ingat return falsedari onclickpengendali acara Anda untuk mencegah tautan diikuti dan menggulir ke atas halaman.

Dalam beberapa kasus mungkin ada tempat berguna sebenarnya untuk mengarahkan tautan. Sebagai contoh jika Anda memiliki kontrol Anda dapat mengklik yang membuka yang sebelumnya disembunyikan <div id="foo">, masuk akal untuk digunakan <a href="#foo">untuk menautkannya. Atau jika ada cara non-JavaScript untuk melakukan hal yang sama (misalnya, 'thispage.php? Show = foo' yang membuat foo terlihat sebagai awal), Anda dapat menautkannya.

Kalau tidak, jika sebuah tautan hanya menunjuk ke beberapa skrip, itu sebenarnya bukan tautan dan tidak boleh ditandai seperti itu. Pendekatan yang biasa akan menambahkan onclickke <span>, <div>, atau <a>tanpa hrefdan gaya dalam beberapa cara untuk membuatnya jelas Anda dapat klik di atasnya. Inilah yang StackOverflow [lakukan pada saat penulisan; sekarang menggunakan href="#"].

Kerugian dari ini adalah Anda kehilangan kontrol keyboard, karena Anda tidak dapat menabrak span / div / bare-a atau mengaktifkannya dengan ruang. Apakah ini sebenarnya merupakan kerugian tergantung pada jenis tindakan yang ingin dilakukan oleh elemen tersebut. Anda dapat, dengan susah payah, berusaha untuk meniru kemampuan keyboard dengan menambahkan tabIndexelemen, dan mendengarkan penekanan tombol Space. Tapi itu tidak akan 100% mereproduksi perilaku browser yang sebenarnya, paling tidak karena browser yang berbeda dapat merespons keyboard secara berbeda (belum lagi browser non-visual).

Jika Anda benar-benar menginginkan elemen yang bukan tautan tetapi yang dapat diaktifkan seperti biasa dengan mouse atau keyboard, yang Anda inginkan adalah <button type="button">(atau <input type="button">sama baiknya, untuk konten teks sederhana). Anda selalu dapat menggunakan CSS untuk menata ulangnya agar terlihat lebih seperti tautan daripada tombol, jika Anda mau. Tapi karena itu berperilaku seperti tombol, itu adalah bagaimana Anda benar-benar harus menandainya.

(*: dalam pembuatan situs, bagaimanapun. Jelas mereka berguna untuk bookmarklet. javascript:pseudo-URL adalah keanehan konseptual: pelacak yang tidak menunjuk ke suatu lokasi, tetapi sebaliknya memanggil kode aktif di dalam lokasi saat ini. Mereka telah menyebabkan keamanan besar-besaran masalah untuk browser dan aplikasi web, dan seharusnya tidak pernah ditemukan oleh Netscape.)


7
Selain posting yang sangat baik oleh @bobince: Saya telah melakukan beberapa penelitian beberapa bulan yang lalu pada navigasi keyboard lintas-browser hrefs, termasuk kebiasaan dan efek samping; beberapa dari Anda mungkin merasa berguna: jakub-g.github.com/accessibility/onclick
jakub.g

2
@ThinkBonobo: SO telah berubah di beberapa titik sejak 2009! Diperbarui.
bobince

59
Ini adalah pendapat dan tidak menjawab pertanyaan. void(0)diperlukan dalam banyak kasus; "#" adalah retasan yang membawa sejumlah masalah (tidak akan berfungsi di aplikasi yang saya tulis, yang membawa saya ke halaman ini).
felwithe

12
Saya setuju dengan @feltwithe. Mengapa memaksa orang lain untuk "Melakukannya dengan Cara Tertentu"? Dalam 15 tahun pemrograman saya belum melihat bagaimana moto "itu harus selalu dilakukan dengan cara ini" tidak membawa orang ke kekacauan buatan mereka sendiri
Steven de Salas

4
Menggunakan id fragmen adalah ide buruk dari perspektif UX karena menyebabkan dokumen melompat ke bagian atas halaman kecuali preventDefaultdigunakan. Tolong jangan lakukan itu jika jangkar digunakan sebagai tombol pada formulir.
Josh Habdas

124

Itu berarti tidak akan melakukan apa-apa. Ini merupakan upaya untuk membuat tautan tidak 'bernavigasi' di mana pun. Tapi itu bukan cara yang benar.

Anda harus benar-benar hanya return falsedi onclickacara tersebut, seperti:

<a href="#" onclick="return false;">hello</a>

Biasanya ini digunakan jika tautannya melakukan hal 'JavaScript-y'. Seperti memposting formulir AJAX, atau menukar gambar, atau apa pun. Dalam hal ini Anda hanya membuat fungsi apa pun yang disebut return false.

Namun, untuk membuat situs web Anda benar-benar luar biasa, Anda akan menyertakan tautan yang melakukan tindakan yang sama, jika orang yang menjelajahinya memilih untuk tidak menjalankan JavaScript.

<a href="backup_page_displaying_image.aspx"
   onclick="return coolImageDisplayFunction();">hello</a>

33
no no - return false akan menghentikan perilaku default, jadi # tidak akan pernah muncul
Magnar

22
protokol javascript: url adalah standar defacto, bukan standar nyata. Jadi href = "#" onclick = "return false;" memenuhi standar sementara href = "javascript: void (0)" tidak, karena tidak ada standar resmi yang menentukan apa yang harus dilakukan.
Breton

10
Selain itu, Douglas Crockford tidak suka batal, jadi jslint akan mengeluh tentang hal itu. Pada dasarnya, karena void adalah operator, dan bukan nilai, itu membingungkan sekali, dan memunculkan banyak pertanyaan seperti ini. Lebih baik hindari sama sekali. ha ha.
Breton

4
Brandon: lihat tanggapan brenton. Cara yang saya sarankan adalah yang paling didukung dan seperti yang saya katakan di bagian kedua dari posting saya, di situs 'tepat' Anda bahkan tidak akan pernah menggunakan '#', karena Anda akan menyediakan sistem cadangan untuk menangani kekurangan javascript.
Noon Silk

19
+1 untuk menyertakan contoh yang benar - benar luar biasa . Bahkan jika Anda tidak memiliki statis HTML jatuh-kembali untuk apa yang Anda lakukan dalam JavaScript, Anda selalu dapat melakukan sesuatu seperti <a href="enableJavaScriptToSeeMyCompletelyAwesomeSite.html" onclick="completelyAwesome();return false;">.
Grant Wagner

73

Ada perbedaan besar dalam perilaku "#" vs javascript: void

"#" menggulir Anda ke TOP halaman sementara "javascript: void (0);" tidak.

Ini sangat penting jika Anda mengkode halaman dinamis. pengguna tidak ingin kembali ke atas hanya karena dia mengklik tautan pada halaman tersebut.


26
@Salvin: Perilaku scroll-to-top-of-page dapat ditekan dengan kembali falseke pengendali event:, onclick="doSomething();return false;"atau jika doSomething()kembali false, Anda dapat menggunakan onclick="return doSomething();".
Grant Wagner

41
@GrantWagner - Atau, 5 tahun kemudian e.preventDefault(),.
trysis

1
Anda mungkin ingin mengedit / menghapus jawaban ini karena "#"tidak tidak gulir ke atas ketika Anda kembali palsu.
Navin

4
@Navin Anda benar, tapi itu sekarang sudah ketinggalan jaman. Komentar oleh trysis dianggap cara yang benar sekarang.
Tim Seguine

66

Ini adalah metode yang sangat populer untuk menambahkan fungsi JavaScript ke tautan HTML.
Misalnya: [Print]tautan yang Anda lihat di banyak laman web ditulis seperti ini:

<a href="javascript:void(0)" onclick="callPrintFunction()">Print</a>

Mengapa kita perlu hrefsementara onclicksendirian bisa menyelesaikan pekerjaan? Karena ketika pengguna mengarahkan kursor ke teks 'Cetak' ketika tidak ada href, kursor akan berubah menjadi tanda sisipan (ꕯ) alih-alih sebuah penunjuk (👆). Hanya memiliki hrefpada atag memvalidasi sebagai hyperlink.

Alternatif untuk href="javascript:void(0);", adalah penggunaan href="#". Alternatif ini tidak memerlukan JavaScript untuk diaktifkan di browser pengguna, sehingga lebih kompatibel.


7
tidak ada yang berguna jika javascript dimatikan.
Jasen

12
Anda tidak perlu hrefmendapatkan kursor tangan yang menunjuk; yang diperlukan hanyalah sedikit CSS.
John Montgomery

1
Mengapa Anda tidak meletakkan fungsi JavaScript di href sebagai gantinya onclick?
Siddhartha Gandhi

2
Saya setuju dengan @Sid - jika Anda menggunakannya untuk memicu fungsi javascript maka <a href="javascript:callPrintFunction()">lebih bersih (meskipun mungkin seharusnya buttonbukan anchor jika tidak benar-benar membawa Anda ke mana pun).
DaveMongoose

href="#"dapat menyebabkan kejutan buruk - seperti permintaan xhr dibatalkan, yang kebetulan dipanggil pada klik ke tautan itu. Saya baru-baru ini mengalami kesulitan men-debug situs web yang membatalkan permintaan login oidc, jika pengguna kebetulan berada di alamat yang bukan root dari situs. #href menyebabkannya memuat ulang alamat sebelum permintaan xhr selesai.
JustAMartin

44

Anda harus selalu memiliki href pada Anda sebuah tag. Memanggil fungsi JavaScript yang mengembalikan 'tidak terdefinisi' akan baik-baik saja. Jadi akan ditautkan ke '#'.

Tag anchor di Internet Explorer 6 tanpa href jangan a:hovermenerapkan gaya.

Ya, ini mengerikan dan merupakan kejahatan kecil terhadap kemanusiaan, tetapi sekali lagi Internet Explorer 6 secara umum.

Saya harap ini membantu.

Internet Explorer 6 sebenarnya merupakan kejahatan besar terhadap kemanusiaan.


25

Perlu disebutkan bahwa Anda kadang-kadang akan melihat void 0 ketika memeriksa undefined, hanya karena membutuhkan lebih sedikit karakter.

Sebagai contoh:

something === undefined

vs.

something === void 0

Beberapa metode minifikasi menggantikan undefined dengan void 0 karena alasan ini.


10
Satu contoh penting adalah TypeScript ( contoh langsung ), yang mengkompilasi nilai parameter default untuk diperiksa void 0. Perbedaan 3 karakter bertambah dengan cepat ketika banyak metode menggunakan nilai param standar.
John Weisz

1
"Beberapa metode minifikasi menggantikan undefined dengan void 0 karena alasan ini." Akhirnya saya mengerti! Terima kasih @quall untuk jawaban yang menyeluruh.
Ahmed Mahmoud

22

Penggunaan javascript:void(0)berarti bahwa pembuat HTML menyalahgunakan elemen anchor sebagai ganti elemen tombol.

Tag jangkar sering disalahgunakan dengan acara onclick untuk membuat tombol pseudo dengan mengatur href ke "#" atau "javascript: void (0)" untuk mencegah halaman dari penyegaran. Nilai-nilai ini menyebabkan perilaku yang tidak terduga saat menyalin / menarik tautan, membuka tautan di tab / jendela baru, membookmark, dan ketika JavaScript masih mengunduh, kesalahan keluar, atau dinonaktifkan. Ini juga menyampaikan semantik yang salah untuk teknologi bantu (misalnya, pembaca layar). Dalam kasus ini, disarankan untuk menggunakan <button>. Secara umum, Anda hanya harus menggunakan jangkar untuk navigasi menggunakan URL yang tepat.

Sumber: Halaman MDN<a> .


4
+1 untuk memunculkan html semantik pada pertanyaan lama ... Tautan menuju tempat, tombol melakukan sesuatu - jika kita tidak menginginkannya terlihat seperti tombol, kita harus menghapus styling.
kevlarr

Pengecualian besar untuk ini adalah peta gambar, yang mungkin perlu menjalankan JavaScript; dan karena itu bukan tombol, itu adalah tautan yang memiliki batas poligon, ini adalah satu-satunya cara.

17

void adalah operator yang digunakan untuk mengembalikan a undefined nilai sehingga browser tidak akan dapat memuat halaman baru.

Browser web akan mencoba dan mengambil apa pun yang digunakan sebagai URL dan memuatnya kecuali itu adalah fungsi JavaScript yang mengembalikan nol. Misalnya, jika kita mengklik tautan seperti ini:

<a href="javascript: alert('Hello World')">Click Me</a>

maka pesan peringatan akan muncul tanpa memuat halaman baru, dan itu karena alert adalah fungsi yang mengembalikan nilai nol. Ini berarti bahwa ketika browser mencoba memuat halaman baru, halaman itu terlihat nol dan tidak ada yang dimuat.

Satu hal penting yang perlu diperhatikan tentang operator batal adalah ia membutuhkan nilai dan tidak dapat digunakan dengan sendirinya. Kita harus menggunakannya seperti ini:

<a href="javascript: void(0)">I am a useless link</a>

1
Saya telah melihat orang menggunakan javascript: null bukan void ... tapi itu masalah. Chrome null berfungsi, di Firefox, ia mencoba memuat halaman nol. Senang Anda diperbarui. Bug yang menarik.
Gavin Pickin

Saya menemukan beberapa kegunaan lain dalam basis kode seperti javascript: null tetapi dengan javascript: null () yang tidak terdefinisi, sehingga berfungsi.
Gavin Pickin

1
Jadi pada dasarnya itu seperti prevendDefault jquery dan mengembalikan false?
Robert Rocha

16

Untuk memahami konsep ini kita harus terlebih dahulu memahami operator batal dalam JavaScript.

Sintaks untuk operator void adalah: void «expr» yang mengevaluasi expr dan mengembalikan yang tidak ditentukan.

Jika Anda menerapkan void sebagai suatu fungsi, tampilannya sebagai berikut:

function myVoid(expr) {
    return undefined;
}

Operator batal ini memiliki satu penggunaan penting yaitu - membuang hasil ekspresi.

Dalam beberapa situasi, penting untuk mengembalikan yang tidak terdefinisi sebagai lawan dari hasil ekspresi. Maka void dapat digunakan untuk membuang hasil itu. Salah satu situasi seperti itu melibatkan javascript: URL, yang harus dihindari untuk tautan, tetapi berguna untuk bookmarklet. Ketika Anda mengunjungi salah satu URL itu, banyak browser mengganti dokumen saat ini dengan hasil mengevaluasi URL "konten", tetapi hanya jika hasilnya tidak ditentukan. Karenanya, jika Anda ingin membuka jendela baru tanpa mengubah konten yang sedang ditampilkan, Anda dapat melakukan hal berikut:

javascript:void window.open("http://example.com/")

2
Terima kasih telah menjelaskan dengan tepat untuk apa argumen 'batal'! Tidak jelas dalam jawaban lain, hanya bahwa "kekosongan mengambil argumen".
dbeachy1

Jawaban yang bagus tetapi satu detail, implementasi batal akan menjadi sesuatu seperti: function myVoid(expr) { expr(); return undefined; } Anda lupa menambahkan expr ();
Juanma Menendez

1
@Juanma Menendez: tidak benar. exprsudah dievaluasi ketika myVoid()dipanggil ( hasil dari ekspresi itu dilewatkan sebagai parameter)
Udo G

@UdoG Saya ingin tahu, bagaimana Anda tahu pria itu? tolong jelaskan
Juanma Menendez

@JuanmaMenendez: ekspresi dalam parameter fungsi selalu dievaluasi sebelum memanggil fungsi itu sendiri. Maaf, saya tidak punya dokumen yang menjelaskan tetapi coba sendiri: function() { alert("foo"); }adalah ekspresi yang valid . void(function() { alert("foo"); })kembali undefineddan tidak menampilkan lansiran, sedangkan myVoid(function() { alert("foo"); })(dalam versi Anda, bukan salah satu dari Gopal Yadav ).
Udo G

14

The voidOperator mengevaluasi ekspresi yang diberikan dan kemudian mengembalikan terdefinisi. Itu menghindari menyegarkan halaman.


9

Pengembang Web menggunakan javascript:void(0)karena ini adalah cara termudah untuk mencegah perilaku default atag. void(*anything*)kembali undefineddan itu adalah nilai yang salah. dan mengembalikan nilai falsy seperti return falsedi onclickacara atag yang mencegah perilaku default.

Jadi saya pikir javascript:void(0)adalah cara paling sederhana untuk mencegah perilaku default dari atag.


8

Tautan harus memiliki target HREF yang ditentukan untuk memungkinkannya menjadi objek tampilan yang dapat digunakan.

Sebagian besar browser tidak akan melewatkan JavaScript tingkat lanjut dalam

<A HREF="" 

tag seperti:

<A href="JavaScript:var elem = document.getElementById('foo');" 

karena tag HREF di sebagian besar browser tidak memungkinkan spasi putih, atau akan mengonversi spasi putih menjadi% 20, HEX sama dengan SPACE, yang menjadikan JavaScript Anda sama sekali tidak berguna untuk penerjemah.

Jadi jika Anda ingin menggunakan tag A HREF untuk mengeksekusi JavaScript inline, Anda harus menentukan nilai yang valid untuk HREF FIRST yang tidak terlalu rumit (tidak mengandung spasi), dan kemudian menyediakan JavaScript dalam tag atribut acara seperti OnClick , OnMouseOver, OnMouseOut, dll.

Jawaban khasnya adalah melakukan sesuatu seperti ini:

<A HREF="#" onclick="var elem = document.getElementById('foo');">Get the object</a>

Ini berfungsi dengan baik tetapi itu membuat halaman melompat ke atas karena tanda pound / tag hash menyuruhnya melakukannya.

Hanya dengan memberikan tanda pound / tanda pagar dalam tag A HREF sebenarnya menentukan jangkar root, yang selalu, secara default bagian atas halaman, Anda dapat menentukan lokasi yang berbeda dengan menggunakan menentukan atribut NAME di dalam tag A HREF.

<A NAME='middleofpage'></A>

Anda kemudian dapat mengubah tag A HREF Anda untuk melompat ke 'middleofpage' dan menjalankan JavaScript di acara OnClick, setelah itu terjadi seperti ini:

<A HREF="#middleofpage" onclick="var elem = document.getElementById('foo');">Get the object</a>

Akan ada waktu BANYAK di mana Anda tidak ingin tautan itu melompat, sehingga Anda dapat melakukan dua hal:

<A HREF="#thislinkname" name='thislinkname' onclick="var elem = document.getElementById('foo');">Get the object</a>

Sekarang itu tidak akan kemana-mana ketika diklik, tetapi itu dapat menyebabkan halaman untuk kembali pusat dari viewport saat ini. Ini tidak cantik. Apa cara terbaik untuk menyediakan javascript in-line, menggunakan A HREF, tetapi tanpa harus melakukan hal di atas? JavaScript: void (0);

<A HREF="JavaScript:void(0);" onclick="var elem = document.getElementById('foo');">Get the object</a>

Ini memberi tahu peramban untuk pergi SEKARANG, tetapi sebaliknya menjalankan JavaScript yang valid: void (0); berfungsi pertama di tag HREF karena tidak mengandung spasi, dan tidak akan diuraikan sebagai URL. Alih-alih itu akan dijalankan oleh kompiler. VOID adalah kata kunci yang, ketika diberikan dengan perameter dari 0 pengembalian TIDAK DILAKUKAN, yang tidak menggunakan sumber daya lagi untuk menangani nilai kembali yang akan terjadi tanpa menentukan 0 (itu lebih manajemen memori / ramah kinerja).

Hal berikutnya yang terjadi adalah OnClick dijalankan. Halaman tidak bergerak, tidak ada yang terjadi dengan tampilan.


+1 untuk menjelaskan semua cara yang berbeda, jangkar seperti ini dapat ditangani. Saya berpendapat bahwa suatu <a>elemen harus selalu pergi ke suatu tempat ; jika hanya pada halaman untuk menjalankan beberapa javascript, maka <button>harus digunakan sebagai gantinya. Menggunakan <button>keduanya lebih bersifat semantik, dan membuat Anda terhindar dari seluruh perdebatan tentang apa yang harus diretas ke jangkar href. Sunting: sepertinya jawaban @Ronnie Royston di bawah sudah mencakup argumen ini.
Rabadash8820

1

JavaScript: samping URL; Di sinilah void dapat berguna untuk menulis kode yang lebih pendek.

var error1 = false,
    error2 = false,
    error3 = false;

function error1() {

  error1 = true;
}

function myFunction() {

  // You can easily return and call a function at once, if you don't care about myFunction's return value
  if (!someCondition1)
    return error1();

  // What if you want to set a value first?
  if (!someCondition2) {
    error2 = true;
    return
  }

  // Shortest way to return and set a value at once
  if (!someCondition3)
    return void(error3 = true);

  // More code goes here
}

Akan lebih baik jika para downvoters setidaknya tahu mengapa mereka downvot. Saya tahu ini bukan pada topik pertanyaan, tetapi saya memikirkan semua orang yang datang ke sini dari hasil pencarian.
Maciej Krawczyk
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.