SORU
28 ŞUBAT 2009, CUMARTESİ


Nasıl html şeklinde iç içe geçmiş sınırı aştı mı?

Xhtml iç içe form etiketleri desteklemiyor biliyorum ve zaten diğer cevapları okudum< / ^ br . burada bu konu ile ilgili stackoverflow, ama yine sorun için zarif bir çözüm bulamadım.

Bazıları buna gerek yok ve bir senaryo bu gerekli olduğunu düşünüyorum. Şahsen buna ihtiyacım YOK böyle bir senaryo düşünemiyorum.

Hadi çok basit bir örnek:

Blog uygulaması yapıyoruz ve yeni bir yazı ve bir araç çubuğu oluşturmak için bazı alanları ile bir form var "eylemler""", "","". İptal Kurtarmak gibi

<form   
 action="/post/dispatch/too_bad_the_action_url_is_in_the_form_tag_even_though_conceptually_every_submit_button_inside_it_may_need_to_post_to_a_diffent_distinct_url"  
method="post">  

    <input type="text" name="foo" /> <!-- several of those here -->  
    <div id="toolbar">
        <input type="submit" name="save" value="Save" />
        <input type="submit" name="delete" value="Delete" />
        <a href="/home/index">Cancel</a>
    </div>
</form>

Amacımız bir şekilde oluşturan yazmaktırjavascript gerektirmezeski html form düz ve düğmeleri gönderin.

Beri eylem url tanımlanmış Form etiketi ve her bir birey gönder düğmesi, bizim tek seçenek olduğu için sonrası için genel bir url başlatın ve "ıf...then...else" belirlemek adının düğme sunuldu. Javascript güvenmek istemiyoruz, çünkü bu çok şık değil, ama elimizdeki tek seçenek.

Tek sorun tuşuna basarak,"", tek şey bu eylem için gerekli post-ıd ile Gizli bir giriş olsa bile sunucudaki TÜM form alanları sunacak. Sil Çok büyük bir olay bu küçük bir örnek, ama ben formları ile yüzlerce (tabiri caizse) alanları ve sekmelerde benim LOB uygulamaları (çünkü gereksinimleri) için Gönder her şeyi bir-git ve ne olursa olsun bu gibi görünüyor çok verimsiz ve israf. Eğer form yuvalama desteklenen olsaydı, en azından sarmak için mümkün olacağını "Sil" içindeki düğme gönderi kimliği alan ile kendi form gönderin.

Diyebilirsiniz """ bir bağlantı yerine". gönder Sil Sadece uygulamak Bu bir çok açıdan yanlış olur, ama Yan etkisi eylemleri gibi çünkü en önemlisi "" burada, hiç bir GET isteği olmalıdır. Sil

Benim sorum (özellikle form yuvalama ihtiyaç yok diyenler için) Ne yaparsın o zaman? Orada kaçırıyorum ya da alt çizgi gerçekten herhangi şık bir çözüm "Ya da javascript gerektiren ya da her şeyi gönderin"?

CEVAP
5 Aralık 2011, PAZARTESİ


Bu eski bir soru olduğunu biliyorum, ama HTML5 birkaç yeni seçenekler sunuyor.

İlk Biçimlendirme araç çubuğundan form ayrı, silme işlemi için bir form ekleyin ve kendi formları form özniteliğini kullanarak araç çubuğundaki düğmeleri ilişkilendirmek için.

<form id="saveForm" action="/post/dispatch/save" method="post">
    <input type="text" name="foo" /> <!-- several of those here -->  
</form>
<form id="deleteForm" action="/post/dispatch/delete" method="post">
    <input type="hidden" value="some_id" />
</form>
<div id="toolbar">
    <input type="submit" name="save" value="Save" form="saveForm" />
    <input type="submit" name="delete" value="Delete" form="deleteForm" />
    <a href="/home/index">Cancel</a>
</div>

Bu seçenek oldukça esnektir, ama özgün yazı da tek bir form ile farklı eylemleri gerçekleştirmek için gerekli olabilir belirtti. HTML5 kurtarmak için, tekrar geliyor. Aynı şekilde farklı düğmeleri farklı adreslere göndermek böylece gönderme düğmeleri formaction özniteliği kullanabilirsiniz. Bu örnek sadece form dışında araç klon bir yöntem ekler, ama aynı şekilde iç içe çalışacak.

<div id="toolbar">
    <input type="submit" name="clone" value="Clone" form="saveForm"
           formaction="/post/dispatch/clone" />
</div>

http://www.whatwg.org/specs/web-apps/current-work/#attributes-for-form-submission

Bu yeni özellikler avantajı bildirimli JavaScript olmadan bunu yapıyorlar. Dezavantajı eski tarayıcılar için bazı polyfilling yapmalısın yani eski tarayıcılar üzerinde desteklenmezler.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • boburnham

    boburnham

    11 Temmuz 2006
  • iZAPPA

    iZAPPA

    16 Temmuz 2010
  • Phymec

    Phymec

    18 Temmuz 2009