<düğmesi> form göndermemeyi sağlayabilir miyim?


516

2 düğmeli bir formum var

<a href="index.html"><button>Cancel changes</button></a>

<button type="submit">Submit</button>

Ben de jQuery UI'nın düğmesini kullanıyorum, böyle

$('button').button();

Ancak, ilk düğme formu da gönderir. Eğer type="submit"olmasaydı, olmayacağını düşünürdüm.

Açıkçası bunu yapabilirdim

$('button[type!=submit]').click(function(event) { event.stopPropagation(); });

Ancak, bu geri düğmesinin JavaScript müdahalesi olmadan formu göndermesini engelleyebilmemin bir yolu var mı?

Dürüst olmak gerekirse, ben sadece jQuery UI ile stil böylece bir düğme kullandım. button()Bağlantıyı aramayı denedim ve beklendiği gibi çalışmadı (oldukça çirkin görünüyordu!).



2
kullanmak <button type="button">formu göndermek etmeyen kişiyi ve <input type="submit">diğeri için. Sonra jquery ile yakalamak$('#formID').submit(function(e){});
Airwavezx

Yanıtlar:


1130

Varsayılan değeri typeoznıtelığı buttonelemanları olan "Gönder". type="button"Formu göndermeyen bir düğme oluşturmak için ayarlayın .

<button type="button">Submit</button>

HTML Standardının deyimiyle : "Hiçbir şey yapmaz."


14
W3schools'a göre bu IE için geçerli değil .
R0MANARMY

53
Bu sadece şaşırtıcı derecede kötü bir tasarım seçeneğidir.
öğleden sonra


Vay canına, sen ve alex revizyonlarda gerçekten duking yapıyorlardı. Neden ikinizin de bir özniteliği tırnak içine alıp almadığınızı anlamıyorum.
ADJenks

228

buttonEleman varsayılan türü vardır submit.

Bir tür ayar yaparak hiçbir şey yapmamasını sağlayabilirsiniz button:

<button type="button">Cancel changes</button>

1
@ B.ClayShannon Pek değil. Düğme tıklatıldığında aynı sayfayı döndürmek için sunucu tarafı kodu kullanabilirsiniz, ancak yine de sayfayı yeniden yükleyecektir. Sonuçta düğme belgenin bir parçasıdır ve bu nedenle tarayıcıya nasıl davranmasını istediğinizi söylemenin tek yolu HTML ve JavaScript'dir.
s4y

17

Eski güzel HTML'yi kullanmanız yeterlidir:

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

İsterseniz, bir bağlantının konusu olarak sarın:

<a href="http://somewhere.com"><input type="button" value="Submit" /></a>

Veya javascript'in başka işlevler sunmasını istediğinize karar verirseniz:

<input type="button" value="Cancel" onclick="javascript: someFunctionThatCouldIncludeRedirect();"/>

7
Uygun tip özniteliğine sahip standart bir düğme kontrolü kullanmak "iyi eski html" dir ve çok daha basit bir işaretleme oluşturur.
R0MANARMY

Bazı tarayıcılarda varsayılan bir gönderme türü ve bazılarında varsayılan bir düğme türü varsa açıkça daha basit değildir. Heck, sadece varsayılan gönderim türüne sahip olmak bile işleri IMO'dan daha karmaşık hale getiriyor. Hiçbir şey yapmayan bir düğmeyi kolayca sağlayan işaretleme olmalıdır. Ve orada:<input type="button" />
Jeffrey Blake

+1 Bu tekniği birçok kez kullandım ve benim için her zaman iyi çalıştı. Varyantlardan biri, istemci tarafı hesaplamasına dayalı olarak sunucu tarafı düğmesi için geri gönderme olayını iptal etmeniz gerektiğinde, window.event.returnValue = false; düğmeniz için istemci tarafı onclick etkinliğinde yürüten kodunuzda ... yani, özel bir doğrulayıcı kontrolü kullanmak sizin için hardalı kesmiyorsa :)
Adam McKee

1
@ JGB146: Sadece aynı değere tüm tarayıcılar varsayılan onlar jleedev ima ettiği gibi o (manuel olarak ayarlanan eğer doğru türde saygı anlamına gelmez, çünkü değil özellikle sorularını söz bunu yapmak için bir yol sorar için. Kalmadan Cevabınız bunu dikkate
almazken

11
@ JGB146: ButtonHTML biçiminde bir kapsayıcıdır. Bu, resimler veya tablolar gibi şeyler yerleştirmenize izin verir (bunu neden yaptığınızdan emin değilsiniz, ancak yapabilirsiniz) vb input. İkisi arasında bir fark vardır ve her birinin uygun kullanım durumu vardır.
R0MANARMY


5

Dürüst olmak gerekirse, diğer cevapları seviyorum. Kolay ve JS girmek gerek. Ama jQuery hakkında soru sorduğunu fark ettim. Bu nedenle, tamlık uğruna, .click () işleyicisiyle false döndürürseniz jQuery'de, widget'ın varsayılan eylemi reddedilir.

Bir örnek için buraya bakın (ve daha fazla güzellik de). İşte belgeler de .

Özetle, örnek kodunuzla şunları yapın:

<script type="text/javascript">
    $('button[type!=submit]').click(function(){
        // code to cancel changes
        return false;
    });
</script>

<a href="index.html"><button>Cancel changes</button></a>
<button type="submit">Submit</button>

Ek bir fayda olarak, bununla, çapa etiketinden kurtulabilir ve sadece düğmeyi kullanabilirsiniz.


Merakla, ekleme e.preventDefault(), gönderimi durdurmak için hiçbir şey yapmaz (nereden başlar function(e)).
Sablefoste

1

Ayarlamadan typeniteliği, ayrıca dönebileceğini falsesenin dan OnClickişleyici ve beyan onclickolarak niteliği onclick="return onBtnClick(event)".


0

Evet, bir değer türü düğmesi özelliği ekleyerek bir düğmenin form göndermemesini sağlayabilirsiniz: <button type="button"><button>


-2
  <form class="form-horizontal" method="post">
        <div class="control-group">

            <input type="text" name="subject_code" id="inputEmail" placeholder="Subject Code">
        </div>
        <div class="control-group">
            <input type="text" class="span8" name="title" id="inputPassword" placeholder="Subject Title" required>
        </div>
        <div class="control-group">
            <input type="text" class="span1" name="unit" id="inputPassword" required>
        </div>
            <div class="control-group">
            <label class="control-label" for="inputPassword">Semester</label>
            <div class="controls">
                <select name="semester">
                    <option></option>
                    <option>1st</option>
                    <option>2nd</option>
                </select>
            </div>
        </div>

        <div class="control-group">
            <label class="control-label" for="inputPassword">Deskripsi</label>
            <div class="controls">
                    <textarea name="description" id="ckeditor_full"></textarea>
 <script>CKEDITOR.replace('ckeditor_full');</script>
            </div>
        </div>



        <div class="control-group">
        <div class="controls">

        <button name="save" type="submit" class="btn btn-info"><i class="icon-save"></i> Simpan</button>
        </div>
        </div>
        </form>

        <?php
        if (isset($_POST['save'])){
        $subject_code = $_POST['subject_code'];
        $title = $_POST['title'];
        $unit = $_POST['unit'];
        $description = $_POST['description'];
        $semester = $_POST['semester'];


        $query = mysql_query("select * from subject where subject_code = '$subject_code' ")or die(mysql_error());
        $count = mysql_num_rows($query);

        if ($count > 0){ ?>
        <script>
        alert('Data Sudah Ada');
        </script>
        <?php
        }else{
        mysql_query("insert into subject (subject_code,subject_title,description,unit,semester) values('$subject_code','$title','$description','$unit','$semester')")or die(mysql_error());


        mysql_query("insert into activity_log (date,username,action) values(NOW(),'$user_username','Add Subject $subject_code')")or die(mysql_error());


        ?>
        <script>
        window.location = "subjects.php";
        </script>
        <?php
        }
        }

        ?>
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.