HTML formundaki varsayılan gönderme düğmesi nasıl belirlenir?


210

Bir form gönderilir ancak belirli bir düğmeyle gönderilmezse, örneğin

  • basarak Enter
  • HTMLFormElement.submit()JS'de kullanma

bir tarayıcının birden fazla gönderme düğmesinden hangisinin basıldığı gibi kullanılacağını nasıl belirlemesi gerekir?

Bu iki düzeyde önemlidir:

  • onclickbir gönder düğmesine eklenmiş bir olay işleyiciyi çağırma
  • web sunucusuna geri gönderilen veriler

Şu ana kadar yaptığım deneyler şunları göstermiştir:

  • basıldığında Enter, Firefox, Opera ve Safari formdaki ilk gönderme düğmesini kullanır
  • düğmesine basarken Enter, anlayamadığım koşullara bağlı olarak IE ilk gönderme düğmesini kullanır veya hiçbirini kullanmaz
  • tüm bu tarayıcılar JS gönderimi için hiçbirini kullanmaz

Standart ne diyor?

Yardımcı olursa, burada test kodum (PHP, sorumun kendisiyle değil, yalnızca test yöntemimle ilgilidir)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
</head>

<body>

<h1>Get</h1>
<dl>
<?php foreach ($_GET as $k => $v) echo "<dt>$k</dt><dd>$v</dd>"; ?>
</dl>

<h1>Post</h1>
<dl>
<?php foreach ($_POST as $k => $v) echo "<dt>$k</dt><dd>$v</dd>"; ?>
</dl>

<form name="theForm" method="<?php echo isset($_GET['method']) ? $_GET['method'] : 'get'; ?>" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">
    <input type="text" name="method" />
    <input type="submit" name="action" value="Button 1" onclick="alert('Button 1'); return true" />
    <input type="text" name="stuff" />
    <input type="submit" name="action" value="Button 2" onclick="alert('Button 2'); return true" />
    <input type="button" value="submit" onclick="document.theForm.submit();" />
</form>

</body></html>

Yanıtlar:


115

Eğer JavaScript (yani yoluyla formu gönderirseniz formElement.submit()ya da bir şey eşdeğer), sonra hiçbiri ait düğmeler başarılı sayılır ve değerlerinin hiçbiri gönderilen verileri dahil edilmiştir gönderin. (Formu kullanarak submitElement.click()gönderirseniz, referansınız olan gönderimin aktif olduğu kabul edilir; burada gönderme düğmesinin açık olmadığı için bu gerçekten sorunuzun sorumluluğu altına girmez, ancak eklemeyi düşündüm İlk bölümü okuyan ve JS form gönderimi yoluyla bir gönderme düğmesini nasıl başarılı hale getireceğini merak eden insanlar için Tabii ki, formun gönderen işleyicileri hala bu şekilde tetiklenirken, form.submit()başka bir balık su ısıtıcısı ...

Form, textarea olmayan bir alandayken Enter tuşuna basılarak gönderilirse, burada ne istediğine karar vermek aslında kullanıcı aracısına bağlıdır. Gözlük (daha sonra açık bir şekilde kullanıldığını özgü gönderme düğmesi olarak hiçbir problem var, eğer sekme bir düğmeye ve uzay ya da her türlü kullanarak etkinleştirmek) bir metin giriş alanına anahtar süre girmek kullanarak bir form gönderme hakkında bir şey söyleme. Tek söylediği, bir gönderme düğmesi etkinleştirildiğinde bir formun gönderilmesi gerektiğidir, örneğin, bir metin girişine girmenin isabetin formu göndermesi bile gerekmez.

Internet Explorer'ın kaynakta ilk görünen gönderme düğmesini seçtiğine inanıyorum; Firefox ve Opera'nın en düşük tabindex ile düğmeyi seçtiğini, başka bir şey tanımlanmamışsa ilk tanımlıya geri döndüğünü hissediyorum. Gönderilerin varsayılan olmayan bir değer özniteliği IIRC'ye sahip olup olmadığına ilişkin bazı komplikasyonlar da vardır.

Alınacak nokta, burada olan şey için tanımlanmış bir standart olmaması ve tamamen tarayıcının kaprisinde olmasıdır - bu nedenle, ne yaparsanız yapın, herhangi bir davranışa güvenmekten kaçının. Gerçekten bilmeniz gerekiyorsa, muhtemelen çeşitli tarayıcı sürümlerinin davranışlarını öğrenebilirsiniz, ancak bunu bir süre araştırdığımda oldukça kıvrımlı bazı durumlar vardı (ki bu elbette yeni tarayıcı sürümleriyle değişebilir) ve tavsiye ederim mümkünse önlemek için!


1
Örnek 2: Temel sorum, "Tarayıcı bir gönderme denetimi belirtmeden form göndermek için herhangi bir yöntem sağlıyorsa ..." etkisine ilişkin herhangi bir spesifik özellik olup olmadığıydı. Ama David'in cevabından yok olduğunu düşünüyorum. IE ile ilgili noktam bazen Enter'a basmanın bir form göndermesi ve herhangi bir gönderme düğmesi ayarlamamasıydı. Bunun bir sonucu olarak, aynı komut dosyasına gönderen birden çok formunuz varsa, bunları ayırt etmek için gönderme düğmelerine güvenemezsiniz. Bu üzerinde çalıştığım projede ortaya çıktı.
Stewart

1
Çok yararlı ilk paragraf parantez bölümü - teşekkürler.
rbassett

63

HTML 4 bunu açık yapmaz. Geçerli HTML5 çalışma taslağı , ilk gönderme düğmesinin varsayılan olması gerektiğini belirtir :

Bir formelementin varsayılan düğme ilk Gönder düğmesini de ağaç sırayla kimin formu sahibi olmasıdır formöğesi.

Kullanıcı aracısı kullanıcının formu dolaylı olarak göndermesine izin veriyorsa (örneğin, bir metin alanı örtük olarak odaklanırken "enter" tuşuna basan bazı platformlarda formu gönderirse, bunu varsayılan düğmesi tanımlanmış bir etkinleştirme olan bir form için yaparsa) davranış , kullanıcı aracısının bu varsayılan düğme üzerinde sentetik tıklama etkinleştirme adımlarını çalıştırmasına neden olmalıdır .


Tamam, işte böyle yapması gerekiyor. Kullanabilirmiyim?
Pacerier

HTML5'te "zımni gönderim" ifadesini gördüğüme sevindim.
Clint Pachl

61

Andrezj hemen hemen çivilendi ... ama burada kolay bir çapraz tarayıcı çözümü.

Bunun gibi bir form alın:

<form>
    <input/>
    <button type="submit" value="some non-default action"/>
    <button type="submit" value="another non-default action"/>
    <button type="submit" value="yet another non-default action"/>

    <button type="submit" value="default action"/>
</form>

ve buna yeniden odaklanın:

<form>
    <input/>

    <button style="overflow: visible !important; height: 0 !important; width: 0 !important; margin: 0 !important; border: 0 !important; padding: 0 !important; display: block !important;" type="submit" value="default action"/>

    <button type="submit" value="some non-default action"/>
    <button type="submit" value="another non-default action"/>
    <button type="submit" value="yet another non-default action"/>
    <button type="submit" value="still another non-default action"/>

    <button type="submit" value="default action"/>
</form>

W3C spesifikasyonu birden fazla gönderme düğmesinin geçerli olduğunu gösterdiğinden, ancak kullanıcı aracının bunları nasıl ele alması gerektiğine dair rehberlik yapmadığından, tarayıcı üreticileri uygun gördükleri şekilde uygulamaya bırakılır. Formdaki ilk gönder düğmesini göndereceklerini veya şu anda odağa sahip olan form alanından sonraki gönder düğmesini göndereceklerini fark ettim.

Ne yazık ki, sadece bir ekran stili eklemek : none; W3C spesifikasyonu herhangi bir gizli öğenin kullanıcı etkileşimlerinden hariç tutulması gerektiğini gösterdiğinden çalışmaz. Onun yerine düz bir şekilde saklayın!

Yukarıda, üretime soktuğum çözümün bir örneği var. Enter tuşuna basmak, varsayılan olmayan diğer değerler mevcut olsa ve DOM'daki varsayılan gönderme düğmesinden önce bile varsayılan form gönderilmesini beklendiği gibi davranır. Javascript işleyicilerinden kaçınırken açık kullanıcı girişleriyle fare / klavye etkileşimi için bonus.

Not: formda sekme yapmak, herhangi bir görsel öğe için odağı göstermez, ancak görünmez düğmenin seçilmesine neden olur. Bu sorunu önlemek için tabindex niteliklerini uygun şekilde ayarlayın ve görünmez gönderme düğmesinde bir tabindex niteliğini atlayın. O kadar! Önemli bu stilleri teşvik etmek yersiz görünse de, onlar gereken bu düzeltme ile müdahale herhangi çerçeve veya mevcut düğme stilleri önler. Ayrıca, bu satır içi stiller kesinlikle zayıf bir formdur, ancak burada kavramları kanıtlıyoruz ... üretim kodu yazmıyoruz.


5
Teşekkürler. Ekran boyunca tökezledi : hiçbiri de sorun. Düğmeyi simge durumuna küçültmek yerine a tuşuyla çevreleyerek sayfa dışına da taşıyabilirsiniz <div style="position: fixed; left: -1000px; top: -1000px />. Endişelenecek bir şey daha var: CSS ile düğmeyi sayfa akışından en aza indirgemek veya uzaklaştırmak WAI sorunlarını getirebilir, çünkü ekran okuyucular hala varsayılan düğmeyi görecektir.
Stefan Haberl

2
Bu ayrıntılı cevap için @James teşekkür ederiz.
Nathan

1
bu benim için çalıştı, teşekkürler. Ben düğme kenarlığı için eklemek zorunda kaldı: none; tamamen
hayal kırıklığına uğratmak

4
Gizli düğmenin tabindex özniteliğini -1 olarak
ayarlayabilirsiniz

2
Orada ne <input/>için var?
Sz.

16

Birisi jQuery ile yapmak istiyorsa bu yazı yardımcı olacağını düşünüyorum:

http://greatwebguy.com/programming/dom/default-html-button-submit-on-enter-with-jquery/

Temel çözüm:

$(function() {
    $("form input").keypress(function (e) {
    if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
        $('input[type=submit].default').click();
        return false;
    } else {
        return true;
    }
    });
});

ve sevdiğim başka bir şey:

jQuery(document).ready(function() {
$("form input, form select").live('keypress', function (e) {
if ($(this).parents('form').find('button[type=submit].default, input[type=submit].default').length <= 0)
return true;

if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
$(this).parents('form').find('button[type=submit].default, input[type=submit].default').click();
return false;
} else {
return true;
}
});
}); 

jQuery.Event her zaman kendi .wichözelliğine sahiptir. Ayrıca DOM'lara .keyCode(ya da .charCodebu konuda) geri dönmeye gerek yok .
Arjan

Burada jQuery ile ilgili bir başka sorun gereksiz çift sorgu. Doğru dönmeye gerek olmadığından, jQuery sürümü daha önce Arjan tarafından önerilen indirimleri entegre etmede gerçekten net ve kısadır.
soletan

Tuş basımı yerine tuş takımı kullandım (tuş e.preventDefault();takımını beklemekten kaçının) ve "gerçek" varsayılan düğmenin yürütülmesini önlemek için bu işlevin başlangıcına ekledim . Gerçekten iyi çalışıyor.
Matt Roy

6

Üzerinde 11 gönderme düğmesi olan bir form vardı ve kullanıcı enter'a bastığında her zaman ilk gönderme düğmesini kullanırdı. Başka bir yerde, bir formda birden fazla gönderme düğmesine sahip olmanın iyi bir fikir (kötü uygulama) olmadığını okudum ve bunu yapmanın en iyi yolu, formdaki tek gönderme düğmesi olarak varsayılan olarak istediğiniz düğmeye sahip olmaktır. Diğer düğmeler "TYPE = BUTTON" biçiminde yapılmalı ve Javascript'te kendi gönderme rutininizi çağıran bir onClick olayı eklenmelidir. Böyle bir şey: -

<SCRIPT Language="JavaScript">
function validform()
{
  // do whatever you need to validate the form, and return true or false accordingly
}

function mjsubmit()
{
  if (validform()) { document.form1.submit(); return true;}
  return false;
}
</SCRIPT>
<INPUT TYPE=BUTTON NAME="button1" VALUE="button1" onClick="document.form1.submitvalue='button1'; return mjsubmit();">
<INPUT TYPE=BUTTON NAME="button2" VALUE="button2" onClick="document.form1.submitvalue='button2'; return mjsubmit();">
<INPUT TYPE=SUBMIT NAME="button3" VALUE="button3" onClick="document.form1.submitvalue='button3'; return validform();">
<INPUT TYPE=BUTTON NAME="button4" VALUE="button4" onClick="document.form1.submitvalue='button4'; return mjsubmit();">

Burada, button3 varsayılan değerdir ve formu diğer düğmelerle programlı olarak göndermenize rağmen, mjsubmit yordamı bunları doğrular. HTH.


19
Kötü bir fikir. Formunuz JS devre dışı bırakıldığında çalışmaz. JS göze batmadan kullanılmalıdır.
BalusC

7
Çok az tarayıcı JS, iPod'larda bile varsayılan olarak kapalıdır! Alıntı yaptığım formda JS kapalı işe yaramaz hale geldi! Çok çalışan JS menteşeleri.
grafik

7
Varsayılan olarak kapatılmış veya kapatılmamış, JS devre dışı bırakılmış olanlar, bu kadar aptalca bir engel bulmak için onu açmak zorunda kalmamalıdır.
Stewart

2
11 form düğmesi ne tür bir form ?? ( merak )
Ben

2
Göze batmayan Javascript'i doğrulamanın en büyük nedeni, rahatsız edici Javascript'in fiddly olma eğiliminde olmasıdır. Ne düşündüğümü niteleyeceğimden emin değilim, ama JS'ye kesinlikle bağlı sayfaları gördüğümde, DOM'umla bazı zor şeyler yapabileceğim ve sunucuda istenmeyen bir şeyler yapabileceğime de bahse giriyorum.
Samantha Branham

6

Bu artık şu şekilde çözülebilir flexbox:

HTML

<form>
    <h1>My Form</h1>
    <label for="text">Input:</label>
    <input type="text" name="text" id="text"/>

    <!-- Put the elements in reverse order -->
    <div class="form-actions">
        <button>Ok</button> <!-- our default action is first -->
        <button>Cancel</button>
    </div>
</form>

CSS

.form-actions {
    display: flex;
    flex-direction: row-reverse; /* reverse the elements inside */
}

Açıklama
Flex kutusunu display: flexkullanarak, CSS kuralını kullanarak da kullanılan bir kaptaki öğelerin sırasını tersine çevirebiliriz :flex-direction: row-reverse . Bunun için hiçbir CSS veya gizli eleman gerekmez. Flexbox'ı desteklemeyen eski tarayıcılar için yine de uygulanabilir bir çözüm alırlar, ancak öğeler tersine çevrilmez.

Demo
http://codepen.io/Godwin/pen/rLVKjm


2

Ben aynı soru ile mücadele hangi ortasında başka bir sayfaya göndermek yönlendirilmiş ortasında Gönder düğmesi vardı, böyle:

<button type="submit" onclick="this.form.action = '#another_page'">More</button>

Kullanıcı enter tuşuna bastığında, başka bir gönderme düğmesi yerine bu düğme tıklandı.

Bu yüzden birden fazla gönderme düğmesi ve farklı görünürlük seçenekleri ile bir ilk oluşturarak bazı ilkel testler yaptım ve onclick olayı hangi düğmenin tıklandığını uyarıyor: https://jsfiddle.net/aqfy51om/1/

Test için kullandığım tarayıcılar ve işletim sistemleri:

PENCERELER

  • Google Chrome 43 (hadi google: D)
  • Mozilla Firefox 38
  • Internet Explorer 11
  • Opera 30.0

OSX

  • Google Chrome 43
  • Safari 7.1.6

Bu tarayıcıların çoğu, "gizli" kapsayıcısında "görünür" olan üçüncü düğmeyi tıklayan IE ve Safari uygulanmış görünürlük seçeneklerine rağmen ilk düğmeyi tıklattı:

<div style="width: 0; height: 0; overflow: hidden;">
    <button type="submit" class="btn btn-default" onclick="alert('Hidden submit button #3 was clicked');">Hidden submit button #3</button>
</div>

Bu yüzden kendimi kullanacağım önerim:

Formunuzda farklı anlamlara sahip birden fazla gönderme düğmesi varsa, formun başına varsayılan eylemi içeren gönderme düğmesini aşağıdakilerden birini ekleyin:

  1. Tamamen görülebilir
  2. İle bir kapta sarılmış style="width: 0; height: 0; overflow: hidden;"

EDIT Başka bir seçenek (hala başlangıçta) style="position: absolute; left: -9999px; top: -9999px;", düğme ofset olabilir , sadece IE denedim - çalıştı, ama başka ne vida gibi bir fikrim yok, örneğin baskı ..


1

Yorumlarınızdan:

Bunun bir sonucu olarak, aynı komut dosyasına gönderen birden çok formunuz varsa, bunları ayırt etmek için gönderme düğmelerine güvenemezsiniz.

Düşürdüm <input type="hidden" value="form_name" />Her forma .

Javascript ile gönderiyorsanız: düğmelerine olayları tıklatmak yerine formlara olay gönderebilirsiniz. Saavy kullanıcıları farelerine çok sık dokunmazlar.


Gerçekten, ama bu şu soruyu yalvarır: stackoverflow.com/questions/541869/…
Stewart

1

Tek bir formda birden çok gönderme düğmeniz varsa ve kullanıcı formu bir metin alanından göndermek için ENTER tuşuna bastığında, bu kod, formdaki olayı key press olayından çağırarak varsayılan işlevselliği geçersiz kılar. İşte bu kod:

$('form input').keypress(function(e){

    if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)){ $(e.target).closest('form').submit(); return false; }
    else return true;

});

Basit ve sorunu giderir
toddmo

1

İlk Enter düğmesinin, görünür olsa da olmasa da, örneğin jquery kullanarak her zaman ilk düğmeye gitmesi gariptir show/hide(). Öznitelik eklemek, .attr('disabled', 'disabled')Gönder düğmesini tamamen almayı engeller. Örneğin , kayıt iletişim kutularındaki Ekle / Düzenle + Sil düğmesi görünürlüğünü ayarlarken sorun olur . Daha az hackish ve basit yerleştirme bulundu Edit önünde Ekle

<button type="submit" name="action" value="update">Update</button>
<button type="submit" name="action" value="insert">Insert</button>
<button type="submit" name="action" value="delete">Delete</button>

ve javascript kodunu kullanın:

$("#formId button[type='submit'][name='action'][value!='insert']").hide().attr('disabled', 'disabled');
$("#formId button[type='submit'][name='action'][value='insert']").show().removeAttr('disabled');

0

Tarifim:

<form>
<input type=hidden name=action value=login><!-- the magic! -->

<input type=text name=email>
<input type=text name=password>

<input type=submit name=action value=login>
<input type=submit name=action value="forgot password">
</form>

Düğmelerden hiçbiri 'tıklanmazsa' varsayılan gizli alanı gönderir.

tıklanırlarsa, tercihleri ​​vardır ve değeri geçilir.


2
Ancak bu davranış standart tarafından belirtilmiş mi? Ve tarayıcılar doğru şekilde uygulamak için güvenilir olabilir mi?
Stewart

iyi soru. Tüm A tarayıcılarda (yui tarayıcı matrisinden) çalışmak için test ettim ve gerçek hayatta alabileceğim en tutarlı olanı (standartların ne belirttiğine bakılmaksızın)
gcb

@yellowandred ne olur? daha sonra bir göz atacak
gcb

1
benim hatam, {type = "hidden"} değiştirdim ve aynı 'isim' değerlerini fark etmedi.
Sarı ve Kırmızı

IE11 veya Fx30'da bu benim için çalışmıyor. Değer her zaman gizli değere ayarlanır.
Jamie Kitson

0

Kullandığım başka bir çözüm, formda sadece bir düğme olması ve diğer düğmeleri taklit etmektir.

İşte bir örnek:

<form>
  <label for="amount">Amount of items</label>
  <input id="amount" type="text" name="amount" />
  <span id="checkStock" class="buttonish">Check stock</span>
  <button type="submit" name="action" value="order">Place order</button>
</form>

Sonra span öğelerini bir düğme gibi görünecek şekilde şekillendiririm. Bir JS dinleyicisi yayılma alanını gözlemler ve tıklatıldığında istenen işlemi gerçekleştirir.

Her durumda doğru olmayabilir, ancak en azından yapmak oldukça kolaydır.


1
JS'yi devre dışı bırakmış olan kullanıcıların yedeği nedir?
Stewart

JS devre dışı bırakılmış kullanıcılar interneti kullanamazlar, günümüzde olduğu kadar basittir.
Christoffer Bubach

0

Gönderen HTML 4 spec :

Bir formda birden fazla gönderme düğmesi varsa, yalnızca etkinleştirilen gönderme düğmesi başarılı olur.

Bu, 1'den fazla gönder düğmesi verildiğinde ve hiçbiri etkinleştirilmediğinde (tıklandığında) hiçbirinin başarılı olmaması gerektiği anlamına gelir.

Bunun mantıklı olduğunu iddia ediyorum: Birden fazla gönderme düğmesi olan devasa bir form düşünün. Üstte, "bu kaydı sil" düğmesi vardır, daha sonra birçok girdi takip eder ve altta "bu kaydı güncelle" düğmesi bulunur. Formun altındaki bir alandayken enter tuşuna basan bir kullanıcı, "bu kaydı sil" in üst kısmına örtülü olarak vurduğundan asla şüphelenmez.

Bu nedenle, kullanıcının tanımlayamadığı (tıklama) ilk düğmeyi veya başka bir düğmeyi kullanmanın iyi bir fikir olmadığını düşünüyorum. Bununla birlikte, tarayıcılar bunu elbette yapıyor.


-2

EDIT: Üzgünüm, bu yanıtı yazarken genel anlamda düğmeler göndermek düşünüyorum. Aşağıdaki cevap type="submit", yalnızca birini bırakıp diğerini type="submit"değiştirdiği için birden fazla düğme ile ilgili değildir type="button". Burada değiştirebilecek birine yardımcı olması durumunda cevabı burada referans olarak bırakıyorumtypeFormunu :

Enter tuşuna basıldığında hangi düğmeye basıldığını belirlemek için düğmesiyle işaretleyebilir type="submit", diğer düğmelerle işaretleyebilirsiniz type="button". Örneğin:

<input type="button" value="Cancel" />
<input type="submit" value="Submit" />

"Button" yazın formun gönderilmesine neden olmaz. Yalnızca istemci tarafı komut dosyalarını tetiklemek için kullanılır.
Stewart

tam olarak, enter tuşuna bastığınızda tarayıcı onu atlar ve "gönder" türünde olan tarayıcı yürütülür. Örneğin, tıklama ile ilgili herhangi bir şey yapmak için "düğmesi" türünde olanı kullanabilirsiniz. Lütfen olumsuz oyu kaldırın.
Jesús Carrera

Soru çoklu gönderme düğmeleriyle ilgiliydi .
Stewart

Örneğim birden çok gönderme düğmesi için tamamen geçerlidir. "Gönder" türüne sahip olan, tarayıcı tarafından basılı olarak hareket etmesi için belirlenen sorudur (sorunun konusu buydu). Ardından diğer düğmeyle, örneğinizde bulunan onClick etkinliği gibi JavaScript etkinliklerini kullanarak gönder düğmesi olarak da kullanabilirsiniz. Bu yüzden cevabım alakalı ve aşağı oyu hak etmiyor. Lütfen kaldırın.
Jesús Carrera

1
Amacınız, sadece bir tanesini "gönder" yazarak ve diğer düğmeleri uygulamak için JavaScript'i kullanarak belirsizliği kaldırmayı önermekse, bu grafik yanıtının bir kopyasıdır ve bu nedenle zaten kötü bir fikir olarak reddedilmiştir.
Stewart
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.