2016-03-30 29 views
1

İşlevimden önce bir veya daha fazla değişken bildirmek istiyorum, ancak işlev yaptığımda işlev başarısız oluyor. Bir işlev içinde bildirilen değişkenlerin yalnızca işlev kapsamında çalışan yerel değişkenler olduğunu anlıyorum. Değişkenim neden işlevimin dışında/dışında bir 'global' değişken olarak çalışmıyor?JavaScript işlevi, işlevden önce bildirilen değişkenle çalışmaz

<script type="text/javascript"> 
    var visitors = document.getElementById('tb254597').value; 
    function limitVisitors() { 
     if (visitors > 60) { 
      alert("We can only accommodate 60 people on a group visit. You entered " + visitors + " visitors."); 
     } 
    } 
</script> 
+2

Hangi hatalar meydana geliyor? –

+3

Bu kimliğe sahip bir öğeniz var mı? bir değeri var mı? konsolda hangi hataları alırsınız? – ochi

+2

Bu komut dosyasını 'body' bitmeden hemen önce ayarlamanız gerekir, ayrıca, bu kimliğe sahip bir öğeye sahip olduğunuzdan emin olun –

cevap

0

Sayfa yüklenir yüklenmez tb254597 değerini yakalarsınız. Bu boş bir dize olacak (''). Kontrol etmek istediğiniz her zaman değerini yakalamanız gerekir.

Bunu bir arkadaşınızın adresini yazarken düşünün. Adresini yazdığınız anda aldınız. Ama hareket ederse ne olur? Eski adrese gidersen arkadaşlarını bulamazsın. Her zaman arkadaşlarınızın son adresini aldığınızı kontrol edin. Başlangıçtaki başında ondan değerini değil, gerçek değer olsun, çünkü

4
  1. , işlevi içinde değişken bildiriminde ve initalization Taşı

    .

    İşlev dışında olmayan değişkene gereksiniminiz varsa, bu işlevin içinde tutmak daha iyidir.

  2. Bir girişten bir dize aldığınız için değeri parseInt() ile bir sayı olarak değiştirin.

  3. limitVisitors() işlevini, muhtemelen gönderin.


function limitVisitors() { 
    var visitors = parseInt(document.getElementById('tb254597').value, 10); 
    if (visitors > 60) { 
     alert("We can only accommodate 60 people on a group visit. You entered " + visitors + " visitors."); 
    } 
} 

limitVisitors(); 
+1

Teşekkürler, @Nina Scholz. Ben tam bir acemiyim ve yardımın için minnettarım. ParseInt() işlevini kullanacağım — bunu düşünmüyorum bile. 3 numaralı noktanız ile ilgili olarak ' – jimw

+0

Aslında, parseInt()' kısmı, JavaScript'in nasıl çalıştığıyla ilgili olarak gerçekten gerekli değildir, [bir dize ile olmayan dize değeri arasındaki ilişkisel karşılaştırma, her ikisi de ilk sayıya dönüşür] (http: // www.ecma-international.org/ecma-262/6.0/#sec-abstract-relational-comparison). Dize "NaN" için zorlanırsa, [işlem yanlış 'ile sonuçlanır] (http://www.ecma-international.org/ecma-262/6.0/#sec-relational-operators-runtime-semantics -değerlendirme). Her neyse, daha yararlı bir yaklaşım, kullanıcı girdisini sınırlamak ya da yanlış girdiyi kullanıcıya bildirmek olacaktır. – rhino

+0

@rhino, "kullanıcı girişini sınırlamak" için giriş elemanında bir max özniteliği ayarlamayı ve type niteliğini "sayı" olarak değiştirmeyi önerir misiniz? – jimw

0

Bu işlev aradığınız bağlıdır. Her iki durumda da, fonksiyonun değerinizi bilmesi için değişkeni fonksiyona aktarmanız gerekir.

bu biraz benzer:

<script type="text/javascript"> 
    // this parameter can be named whatever 
    function limitVisitors(param1) { 
    if (param1 > 60) { 
     alert("We can only accommodate 60 people on a group visit. You entered " + param1 + " visitors."); 
    } 
    } 

    // Just make sure that this value gets passed to the function like this 
    var visitors = document.getElementById('tb254597').value; 
    limitVisitors(visitors); 
</script> 

Ve sen ne zaman DOM aslında yükler çalıştırmak için $(document).ready() işlevini kullanın böylece jQuery düşünebilir. Kullanıcı girişi için izin verecekseniz, bir düğme tıklaması gibi bir olayın olmasını isteyebilirsiniz.

DÜZENLEME: HTML öğenizde onchange'i kullandığınızdan, ihtiyacınız olan her şey bu olmalıdır.

<input type="text" name="Field_Number_of_visitors" size="20" id="tb254597" onchange="limitVisitors(this.value);" /> 

<script type="text/javascript"> 
    // this parameter can be named whatever 
    function limitVisitors(param1) { 
    if (param1 > 60) { 
     alert("We can only accommodate 60 people on a group visit. You entered " + param1 + " visitors."); 
    } 
    } 
</script> 
+0

Teşekkürler, Minnow990. İşlev çağrısındaki parametrenin neden '.value' eklemek için gerekli olduğundan emin değil. – jimw

+0

@jimw Normalde 'this' (çağrı) 'ye yapılan çağrı, yalnızca niteliklerin değil, elementin kendisini seçer. Sadece değerini işlevdeki parametreye çağırmak istediğinizden, bunu 'this.value' ile çalıştırın. Dediğim gibi jQuery çok yararlı kısayol işlevlerine sahip olduğu gibi tavsiye ederim. – Minnow990

0

ben bunu düşünüyorum:

 function limitVisitors() { 
      var visitors = parseInt(document.getElementById('tb254597').value); 
      if (visitors > 60) { 
       alert("We can only accommodate 60 people on a group visit. You entered " + visitors + " visitors."); 
      } 
     } 

Eğer arasam limitVisitors sen değeri elde ve karşılaştırır işlev çağrısı değişikliği unutmayın.

İlgili konular