2016-04-03 21 views
1

[contenteditable] öğesinin HTML formu bulunmadığını gösteren bir DEMO hazırladım. Benim için, bu bir sorun çünkü jQuery doğrulama eklentisi forma ihtiyaç duyar. 383 satırından başlayarak kaynak kod parçacığı from here bak: Bir [contenteditable] bunlardan biri[contenteditable] öğeleri ve jQuery doğrulama eklentisi ile ilgili sorunlar

İşte
function delegate(event) { 
    var validator = $.data(this.form, "validator"), 
     eventType = "on" + event.type.replace(/^validate/, ""), 
     settings = validator.settings; 
    if (settings[ eventType ] && !$(this).is(settings.ignore)) { 
     settings[ eventType ].call(validator, this, event); 
    } 
} 

$(this.currentForm) 
    .on("focusin.validate focusout.validate keyup.validate", 
     ":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], " + 
     "[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], " + 
     "[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], " + 
     "[type='radio'], [type='checkbox'], [contenteditable]", delegate) 

    // Support: Chrome, oldIE 
    // "select" is provided as event.target when clicking a option 
    .on("click.validate", "select, option, [type='radio'], [type='checkbox']", delegate); 

görebildiğimiz, elementler, olaylar dinlemek ve daha sonra delegate olay işleyicisi diyoruz.

zaman bu listeden bazı olayı tetiklemek [contenteditable], delegate yöntem eleman var validator = $.data(this.form, "validator") gelen doğrulayıcı elde etmeye çalışmak ama daha önce söylediğim gibi [contenteditable] formu yoktur (bkz DEMO).

Bu sorunu çözmenin bir yolu var mı? Tüm [contenteditable] öğelerine form eklemek mümkün olabilir mi?

cevap

1

Bu jquery validator plugin bilinen bir hatadır. Ancak, bu şu anda bu pull request'da düzeltildi ve yakında piyasaya sürülmelidir.

Fix 1: Bir serbest bırakılması için sabırsızlanıyorum Eğer

, düzeltme delegate() yöntemi başında bu kodu koymaktır. Çözelti, @svrx tarafından yapılmıştır. Eğer düzeltme görebileceğiniz gibi

// Set form expando on contenteditable 
if (!this.form && this.hasAttribute("contenteditable")) { 
    this.form = $(this).closest("form")[ 0 ]; 
} 

ana öğeye formu ayarlamak için basitçe.

Fix 2: @chrisAtomix gibi

son jquery validator plugin kullanmayın, onun comments söyledi. Bunun yerine, contenteditable özelliğinin eklenmediği daha düşük bir sürüm kullanın. v1.14.0 kullanıyor.

+0

Teşekkürler. Şimdi 'v1.14.0' kullanıyorum ve bir sürüm bekliyorum –