2016-04-04 23 views
7

Jestem bardzo nowy w HTML, CSS i JavaScript. Próbuję użyć jQuery, aby przycisk aktywny lub nieaktywny w zależności od pory dnia. Udało mi się uzyskać poprawną zmianę obrazu po zdefiniowaniu czasu (d), czasu open i czasu close. Mam jednak problem z przypisaniem linku do przycisków w zależności od pory dnia.Używanie JQuery do dodawania łącza do elementu, jeśli spełniony jest warunek

Ten kod poprawnie stosuje klasę, jeśli czas jest między open a close. Poprawnie stosuje także łącze do ButtonOne div, tylko gdy klasa ManagersChatButtonActive jest zastosowana w JSFiddle. Jednak w SharePoint, jeśli tak się stanie, link jest stosowany również wtedy, gdy warunek czasu nie jest spełniony.

Jak mogę uzyskać, aby łącze było stosowane tylko po spełnieniu warunku "Jeśli"?

(To jest mój pierwszy raz na przepełnieniu stosu, więc przepraszam, jeśli nie jest to zbyt dobrze określone lub wyjaśnione).

$(document).ready(function() { 
    var d = new Date(); 
    var open = new Date(); 
    open.setHours(9); 
    open.setMinutes(0); 
    open.setSeconds(0); 

    var close = new Date(); 
    close.setHours(18); 
    close.setMinutes(0); 
    close.setSeconds(0); 

    if (d >= open && d < close) { 
     $(".ButtonOne").addClass("ManagersChatButtonActive"); 
     $(".ButtonOne").wrap('<a href="http://www.google.com"/>'); 
    } else { 
     $(".ButtonOne").addClass("ManagersChatButtonInactive"); 
    } 
}); 
+2

Chcielibyśmy trzeba zobaczyć, jakie wartości 'd',' 'close' open' i są aby móc Ci skutecznie pomóc. –

+0

Witaj, Rory, dodałem pozostałe części. –

+1

gdzie jest zdefiniowane d? –

Odpowiedz

2

Upewnij się zawinąć metodę w składni JQuery dla dokumentu na gotowy lub od obciążenia, co następuje:

$(function(){ 
    var d = new Date() 

    var open = new Date(); 
    open.setHours(9); 
    open.setMinutes(0); 
    open.setSeconds(0); 

    var close = new Date(); 
    close.setHours(18); 
    close.setMinutes(0); 
    close.setSeconds(0); 

    if (d >= open && d < close) { 

    $(".ButtonOne").addClass("ManagersChatButtonActive"); 
    $(".ButtonOne").wrap('<a href="http://www.google.com"/>'); 
    } else { 
    $(".ButtonOne").addClass("ManagersChatButtonInactive"); 
    } 
}) 

https://jsfiddle.net/aaronfranco/3xwhoh10/1/

Może to również więcej sensu używać getTime() używać znacznika czasu UNIX, który jest liczbą, zamiast ciągu daty.

$(function(){ 
    var d = new Date().getTime(); 

    var open = new Date(); 
    open.setHours(9); 
    open.setMinutes(0); 
    open.setSeconds(0); 
    open = open.getTime() 

    var close = new Date(); 
    close.setHours(18); 
    close.setMinutes(0); 
    close.setSeconds(0); 
    close = close.getTime() 

    if (d >= open && d < close) { 

    $(".ButtonOne").addClass("ManagersChatButtonActive"); 
    $(".ButtonOne").wrap('<a href="http://www.google.com"/>'); 
    } else { 
    $(".ButtonOne").addClass("ManagersChatButtonInactive"); 
    } 
}) 
+0

Cześć Aaron, miałem $ (dokument) .ready (function() {i odpowiednie zamknięcie w moim pliku, nie byłem pewien, ile i jak mało powinienem dodać do mojego przykładu. Dodałem te linie z powrotem teraz Działa poprawnie w JSFiddle, ale kiedy pełny tekst (z CSS i HTML) jest dodawany do części Web Content Editor, link jest cały czas obecny –

+0

Będziesz musiał opublikować JSFiddle, który powiela problem lub dodaj więcej kodu za pomocą HTML i CSS, aby pokazać nam jaśniej: –

+2

Gotowy dokument jQuery nie zawsze działa zgodnie z oczekiwaniami w środowisku SharePoint Zobacz: [SharePoint 2013 dodaj javascript po załadowaniu całej strony] (http://stackoverflow.com/ pytania/16936250/sharepoint-2013-add-javascript-after-whole-page-load) – Roberto

2

Nie zapomnij, aby uzyskać aktualny czas z getHours lub metoda getTime . Chcesz to porównać ze swoim stanem. Wartości te nie muszą być w formacie czasu, można też po prostu użyć liczb statycznych.

Można po prostu zrobić coś takiego:

var time = new Date(), 
hours = time.getHours(); 

if (hours >= 9 && hours < 18) { 
    $(".ButtonOne").addClass("ManagersChatButtonActive"); 
    $(".ButtonOne").wrap('<a href="http://www.google.com"/>'); 
} else { 
    $(".ButtonOne").addClass("ManagersChatButtonInactive"); 
} 

przykład roboczych: https://jsfiddle.net/crix/7o4uhLxe/

nadzieję, że to pomaga!

+0

oddano do głosowania, chociaż nie rozwiązuje to problemu, jest to godna uwagi poprawa oryginalnego kodu – Roberto

1

Sprawdziłem twój kod w przeglądarce za pomocą jQuery, ale nie wiem o SharePoint, więc domyślam się, że po prostu zamykasz kod, który działa dobrze z jQuery, w .ready(), tak, że kiedy dokument jest gotowy tylko wtedy Twój kod jest uruchamiany, a gdy ".ButtonOne" element jest inicjowany w DOM:

$(document).ready(function(){ 
 
      var d = new Date(); 
 
      var open = new Date(); 
 
      open.setHours(9); 
 
      open.setMinutes(0); 
 
      open.setSeconds(0); 
 
      console.info(d); 
 
      console.log(open); 
 
      var close = new Date(); 
 
      close.setHours(18); 
 
      close.setMinutes(0); 
 
      close.setSeconds(0); 
 
      console.log(close); 
 
      if (d >= open && d < close) { 
 
       console.info("INSIDE"); 
 
       $(".ButtonOne").addClass("ManagersChatButtonActive"); 
 
       $(".ButtonOne").wrap('<a href="http://www.google.com"/>'); 
 
      } else { 
 
       console.info("INSIDE ELSE"); 
 
       $(".ButtonOne").addClass("ManagersChatButtonInactive"); 
 
      } 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="ButtonOne" > 
 
This is the desired ButtonOne Div 
 
</div>

+0

@Andy Możesz sprawdzić element dla c lass lub otwórz konsolę przeglądarki i zobacz wyjście console.log i console.info, aby uzyskać lepsze zrozumienie. – shivgre

+0

Cześć shivgre, dziękuję za twój wkład. Mam jednak taki sam wynik. Link pozostaje aktywny nawet po zastosowaniu klasy "Nieaktywne". Ale tylko w SharePoint. –

+0

@AndyGill możesz udostępniać swoje nieaktywne css klasy? – shivgre

Powiązane problemy