2010-07-13 4 views
3

Mon script fonctionne sijavascript erreur

<script type="text/javascript"> 
$(document).ready(function() { 
    $('#holidayDate').datepicker(); 
    var availableTags = ["New years Day", "Martin Luther King Day", "Groundhog Day", "Valentine's Day", "Washington's Birthday", "Easter", "Earth Day", "National Arbor Day", "Mother's Day", "Memorial Day", "Flag Day", "Father's Day", "Independence Day", "Labor Day", "Columbus Day", "Halloween", "Veterans Day", "Thanksgiving Day", "Pearl Harbor Remembrance Day", "Christmas Day"]; 
    $("#tags").autocomplete({source:availableTags}); 
    $('#holidayDate').change(function() { 
     if ($(this).val().substring(0, 5) === '12/25') { 
      $('#tags').val('Christmas Day'); 
     } 
     else { 
      $('#tags').val(''); 
     }     
    }); 
}); 
</script> 

Et sa ne fonctionne pas si j'inclure plusieurs valeurs à l'aide "si" ou "else if"

<script type="text/javascript"> 
$(document).ready(function() { 
    $('#holidayDate').datepicker(); 
    var availableTags = ["New years Day", "Martin Luther King Day", "Groundhog Day", "Valentine's Day", "Washington's Birthday", "Easter", "Earth Day", "National Arbor Day", "Mother's Day", "Memorial Day", "Flag Day", "Father's Day", "Independence Day", "Labor Day", "Columbus Day", "Halloween", "Veterans Day", "Thanksgiving Day", "Pearl Harbor Remembrance Day", "Christmas Day"]; 
    $("#tags").autocomplete({source:availableTags}); 
    $('#holidayDate').change(function() { 
     if ($(this).val().substring(0, 5) === '12/25') { 
      $('#tags').val('Christmas Day'); 
     } 
     if ($(this).val().substring(0, 5) === '01/01') { 
      $('#tags').val('New years Day'); 
     } 
     if ($(this).val().substring(0, 5) === '02/02') { 
      $('#tags').val('Groundhog Day'); 
     } 
     if ($(this).val().substring(0, 5) === '02/14') { 
      $('#tags').val('Valentine's Day'); 
     } 
     if ($(this).val().substring(0, 5) === '04/22') { 
      $('#tags').val('Earth Day'); 
     } 
     if ($(this).val().substring(0, 5) === '10/12') { 
      $('#tags').val('Columbus Day'); 
     } 
     if ($(this).val().substring(0, 5) === '07/04') { 
      $('#tags').val('Independence Day'); 
     } 
     if ($(this).val().substring(0, 5) === '10/31') { 
      $('#tags').val('Halloween'); 
     } 
     if ($(this).val().substring(0, 5) === '11/11') { 
      $('#tags').val('Veterans Day'); 
     } 
     if ($(this).val().substring(0, 5) === '12/07') { 
      $('#tags').val('Pearl Harbor Remembrance Day'); 
     } 
     else { 
      $('#tags').val(''); 
     }     
    }); 
}); 
</script> 
+0

Vous pouvez reformater un peu pour que ce soit un li plus facile à suivre –

+0

Semble que [code] ne fonctionne pas - mettez en surbrillance le code et cliquez sur le bouton 101010 – mplungjan

+1

Avez-vous essayé d'utiliser FIREBUG? ;) C'est une bouée de sauvetage! – Jakub

Répondre

6
$('#tags').val('Valentine's Day'); 

Vous avez un problème de devis ici ...
devrait être:

$('#tags').val('Valentine\'s Day'); 

Notez la barre oblique inverse pour échapper à la citation ...

3

Cette ligne provoquera une erreur

$('#tags').val('Valentine's Day'); 
1

Se pourrait-il qu'il est rompu en raison de

('Valentine's Day'); 

votre guillemet simple au milieu ferme la chaîne

2

Vous pouvez également mettre $(this).val().substring(0, 5) dans une variable afin d'éviter de récupérer les données à chaque condition.

-1

essayer ce code snip

<script type="text/javascript"> 
$(document).ready(function() { 
    $('#holidayDate').datepicker(); 
    var availableTags = ["New years Day", "Martin Luther King Day", "Groundhog Day", "Valentine's Day", "Washington's Birthday", "Easter", "Earth Day", "National Arbor Day", "Mother's Day", "Memorial Day", "Flag Day", "Father's Day", "Independence Day", "Labor Day", "Columbus Day", "Halloween", "Veterans Day", "Thanksgiving Day", "Pearl Harbor Remembrance Day", "Christmas Day"]; 
    $("#tags").autocomplete({source:availableTags}); 
    $('#holidayDate').change(function() { 
    substr = $(this).val().substring(0, 5); 
     if (substr == '12/25') { 
      $('#tags').val('Christmas Day'); 
     } 
     else if (substr == '01/01') { 
      $('#tags').val('New years Day'); 
     } 
     else if (substr == '02/02') { 
      $('#tags').val('Groundhog Day'); 
     } 
     else if (substr == '02/14') { 
      $('#tags').val('Valentine's Day'); 
     } 
     else if (substr == '04/22') { 
      $('#tags').val('Earth Day'); 
     } 
     else if (substr == '10/12') { 
      $('#tags').val('Columbus Day'); 
     } 
     else if (substr == '07/04') { 
      $('#tags').val('Independence Day'); 
     } 
     else if (substr == '10/31') { 
      $('#tags').val('Halloween'); 
     } 
     else if (substr == '11/11') { 
      $('#tags').val('Veterans Day'); 
     } 
     else if (substr == '12/07') { 
      $('#tags').val('Pearl Harbor Remembrance Day'); 
     } 
     else { 
      $('#tags').val(''); 
     }     
    }); 
}); 
</script> 
+2

pourquoi ne pas simplement lui dire d'utiliser une déclaration de commutateur? IF/ELSE de cette ampleur rend le code horrible! http://www.w3schools.com/js/js_switch.asp – Jakub

+0

vous avez raison .. s'il vous plaît être désolé –

7

D'autres me frappaient à la réponse, mais je voudrais encore faire une petite suggestion. Lorsque vous travaillez avec beaucoup de si et sinon si il est parfois utile de l'échanger pour une carte d'objet. À l'heure actuelle, dans votre code vous effectuez beaucoup de recherches inutiles qui devraient au moins être stockés dans une variable à la place, mais en utilisant une carte d'objet pourrait rendre ce code beaucoup plus simple:

var map = { 
    "12/25": "Christmas Day", 
    "01/01": "New Years Day", 
    "02/02": "Groundhog Day", 
    "02/14": "Valentine's Day", 
    "04/22": "Earth Day", 
    "10/12": "Columbus Day", 
    "07/04": "Independence Day", 
    "10/31": "Halloween", 
    "11/11": "Veterans Day", 
    "12/07": "Pearl Harbour Remembrance Day", 
} 
$('#holidayDate').change(function() { 
    // Check our object map for the date, default to "" if there isn't one. 
    $('#tags').val(map[$(this).val().substring(0, 5)] || ""); 
}); 

beaucoup plus propres, l'OMI.

EDIT: Puisque vous ne pouvez pas le faire fonctionner, j'ai créé an example pour vous.

+0

Son ne fonctionne pas [CODE] ' // i INCLUS CES DEUX LINES ICI $ (document) .ready (function() { $ ('# holidayDate'). Datepicker(); // JQUERY DATEPICKER // VOTRE CODE ICI .. }); '[/ CODE] –

+1

@oneofthelions: mis à jour ma réponse avec un exemple de travail sur jsfiddle.net. –

+0

pourquoi notre 'getThirdMonday() 'ne fonctionnait pas? –

1

J'ai créé un NthDay pour gérer dernier jour de et ont une mise en œuvre de Pâques aussi

La dernière version - Complete example with autofill of date from holiday too

Ce qui reste est de faire un joli plugin jQuery

ici est une partie du code - pas plus de commutateur

var fixedHolidayMap = { // "Name of day":"MM/DD" 
"New years Day"    :"01/01", 
"Groundhog Day"    :"02/02", 
"Valentine's Day"    :"02/14", 
"Earth Day"     :"04/22", 
"Flag Day"     :"06/14", 
"Independence Day"   :"07/04", 
"Halloween"     :"10/31", 
"Veterans Day"    :"11/11", 
"Pearl Harbor Remembrance Day":"12/07", 
"Christmas Day"    :"12/25" 
} 
var variableHolidayMap = { // "Name of day":"Nth,DDD,M" 
"Martin Luther King Day":"3,Mon,1", // 3rd Mon in Jan 
"Washington's Birthday" :"3,Mon,2", // 3rd Mon in Feb 
"National Arbor Day" :"-1,Fri,4", // Last Fri of Apr 
"Mother's Day"   :"2,Sun,5", // 2nd Sun in May 
"Memorial Day"   :"-1,Mon,5", // Last Mon of May 
"Father's Day"   :"3,Sun,6", // 3rd Sun in Jun 
"Labor Day"    :"1,Mon,9", // 1st Mon in Sep 
"Columbus Day"   :"2,Mon,10", // 2nd Mon in Oct 
"Thanksgiving Day"  :"4,Thu,11" // 4th Thu in Nov 
}; 
var availableTags = ["Easter"]; // the odd one out 
var fixedHoliday = []; 
for (var o in fixedHolidayMap) { // build a holiday by dateString 
    availableTags[availableTags.length] = fixedHolidayMap[o]; 
    fixedHoliday[fixedHolidayMap[o]]=o; 
} 
for (var o in variableHolidayMap) availableTags[availableTags.length] = o; 
+0

Pourquoi cela ne fonctionne pas pour moi. Est-ce que cela fonctionne avec vous. J'ai vérifié et j'ai le script exact. –

+0

Avez-vous implémenté ou commenté le "getThirdMondayInJanuary()" ??? Il a été conçu comme un pointeur vers un jour possible MLK – mplungjan

+0

j'ai essayé de mettre en œuvre. Mais mon code ne se chargerait pas si j'avais cette syntaxe MLK ... est-ce la bonne façon d'obtenir le troisième lundi? –