jQuery / PHP ve dilli onaylamak / uyarı kutuları

2 Cevap php

Ben bu soruyu göndermek üzereyken, ben an easy solution türden-bir çözüm geldi.

Sorun kullanıcı tarafından seçilen dile bağlı olarak, birden çok dilde onay mesajlarının gerekli oldu. Ben her zaman HTML belirli bilgi kapmak beri, ben bu şekilde yapmaya çalışıyor, ama bu nokta etrafında takıldı:

Burada kullanıcı için basit silme düğmesi doğru mesajı bir başlık niteliğini kullanarak, var (sadece metin değil bu örnekte, kodu, doğru çeviri içeren bir değişken):

<input type="submit" name="delete" value="Delete me" title="Are you sure?" />

Ve sonra o kadar gibi, jQuery ile bu satırı almak ve onaylamak kutusunda görüntülemek:

$("input[type='submit'][name='delete']").click(function() {
  return confirm($(this).attr('title'));
});

Ancak, bu hala giriş elemanı ben sevmiyorum Mouseover ile görünür olan bir başlık vardı demek istiyorum. Onaylama kutusunu iptal ve tekrar butonuna tıklayarak daha sonra boş bir mesajın neden olacaktır çünkü çıkarmadan, gerçekten bir seçenek değildi.

Metin basit bir çizgi almak için neyse, bütün bu yaklaşım, sadece benim için çalışma değildi. Sonra $ düşündüm olsun (). - Ben daha önceki düşünmemiştim neden diğer senaryolarda o her zaman kullanmak çünkü ve ben, bilmiyorum.

Yani bu doğrudan HTML ile uğraşmak zorunda ve başlıkları veya diğer özelliklerini dışarı okumadan, JavaScript içine doğru metinleri almak için genel olarak oldukça iyi bir çözümdür sanırım.


$("input[type='submit'][name='delete']").click(function() {
    $.get('something.php', {
    		action: 'getText',
    		variable: 'confirm_delete'
    	}, function(text) {
    		return confirm(text); // doesn't return instantly...
      });
    return false; // breaks the form action...
});


UPDATE
Ok, now I turn this back into a question about the last part of the jQuery script. It seems that $.get() needs some time to retrieve the information. It's propably not much time at all, but it's some, and in the mean time, the form is already being submitted. The return false at the bottom solves this in part, because it's the first thing that gets returned. But then, when the return confirm follows, clicking OK won't do much of anything, since return false already stopped the default button action.

Yani .. benim soru: $.get() kullanarak metni almak için bir yol var, ve form gönderme kadar bekler ki böyle bir şekilde return confirm yüklenir?

2 Cevap

Ne öneriyorsun başlangıçta size biraz daha fazla zaman mal olacak ama ben inanıyorum uzun vadeli size fayda bir şeydir.

Ben de çok dilli olarak ayarlanmış bir proje var, bu yüzden sayfasında yapılacak ilk şeylerden biri ben o sayfanın gerekir metni yük olduğunu.

(Ben gerçekten çok metin şu anda, ama belli ki sen istersen, bir veritabanı, txt dosyasında bunu yapabileceğini yok) basit bir XML dosyası benim metin depolamak, ve sonra ben sadece ({[ile yükleyebilirsiniz 0)]} size hemen) onu aramak için deneyin önce metni tüm yüklenir biliyorum ki]} false ayarlandığında ({[(1). Ben bu bir parametre olarak bir dil kodu alır benim language nesne olarak kurdunuz. Ben ne zaman ihtiyacınız Yani language = new language('en-us'); sayfamın başında arayarak, kolayca herhangi bir dil agnostik metin yakalayabilir. Eğer proje bu uygulanan Örneğin, bu basit olacaktır:

$("input[type='submit'][name='delete']").click(function() {
  return confirm(language.text('are_you_sure'));
});

Edit: Ben de sadece, böylece tek bir merkezi yerde tüm metin tutmak, PHP ve jQuery aynı XML dosyasını okuyabilir çünkü bu, çok PHP ile iyi çalıştığını söylemek istiyorum.

Bu yaklaşım sevmiyorum, ben diğer iki HTML çalışıyordum ki benzer yaklaşımları işaret ediyorum. İlk basit bir input[type=hidden] alanını kullanmaktır. Bu şekilde, sizin sevmediğiniz mouseover etkisi olmayacaktır. Sonra sadece bu gibi bir şey yapabilirsiniz:

<input type="hidden" name="confirm_text" value="Are you sure?" />
$("input[type='submit'][name='delete']").click(function() {
  return confirm($('input[name=confirm_text]').val());
});

Ancak, dürüst olmak gerekirse, bu oldukça kaba olduğunu düşünüyorum ve çok anlamsal değil. Diğer seçenek bir data- niteliğini kullanmaktır, ancak HTML5 (kolayca-sadece do doctype değiştirebilirsiniz) kullanıyorsanız, bu sadece size açıktır. İşte bu şekilde çalışacak:

<input type="submit" name="delete" value="Delete me" data-confirmtext="Are you sure?" />
$("input[type='submit'][name='delete']").click(function() {
  return confirm($(this).attr('data-confirmtext'));
});

En iyi uygulamalar ve semantik ilgilendiğiniz beri tüm bu seçeneklerin, ben kesinlikle, ilk iyi biri olduğunu düşünüyorum. Alakasız HTML nitelikleri veya gizli alanlar rasgele veri depolamak için çalışmak gibi çok anlamsal bana gelmedi. Bu yardımcı olur umarım!

Ben çözüm biraz daha ayar kullanabilirsiniz düşünüyorum. Bu şekilde yaparak gerçekten gerekli değildir (mümkünse) çok ajax istekleri oluşturur.

Sadece rel niteliğini kullanabilirsiniz:

<input type="submit" name="delete" value="Delete me" rel="Are you sure?" />

Sonra

$("input[type='submit'][name='delete']").click(function() {
  return confirm($(this).attr('rel'));
});

Better yet, you could store a key in the rel attribute such as rel='confirmation.delete'. Sonra have an interpreter such as:

var stringLibrary = {
    prompt: {
        foo: "Enter your foo:",
        bar: "How many bars?"
    },
    confirmation: {
        delete: "Are you sure you want to delete that?"
    },
    error: {
        codes: {
            324: "Oh no!",
            789: "Oh yes!"
        }
    }
};

var trans = function(key) {
    var result = stringLibrary;
    key = key.split(".");

    for ( var i in key ) {
        if ( result[ key[i] ] ) {
            result = result[ key[i] ];
        } else {
            return null;
        }
    }

    return result;
}

Usage:

console.log(trans("prompt.foo"));
console.log(trans("confirmation.delete"));
console.log(trans("error.codes.324"));
console.log(trans("i.dont.exist"));

$("input[type='submit'][name='delete']").click(function() {
  return confirm( trans($(this).attr('rel')) );
});