2016-11-21 2 views
0

Я застрял в непростой проблеме. Я очень хорошо знаю ASP.NET, но я не очень хорошо разбираюсь в JavaScript. У меня есть большие часы обратного отсчета на моей домашней странице, где используются различные файлы JavaScript. Я нашел файл, в котором дата окончания хранится, и это статическое значение.Передача строки в виде переменной в функцию JavaScript не работает

$(".count-down").ccountdown(2016,12,25,'10:00'); 

Я хочу прочитать дату из скрытых полей, который заполняется из моей базы данных так, что кто-то в CMS может установить значение в панели администратора. Я закодировал следующее:

var countdowndate = document.getElementById('hdnCountdownDate').value; 
//alert(countdowndate); 
$(".count-down").ccountdown(countdowndate); 

(Примечание, а .ccountdown не опечатка)

Поле ASP.NET представляет;

<form runat="server"> 
    <asp:HiddenField ID="hdnCountdownDate" runat="server" /> 
</form> 

Codebehind для домашней страницы устанавливает значение скрытого поля;

hdnCountdownDate.Value = "2016,12,25,'10:00'" 

Я разместил предупреждение после объявления и настройки переменной, и это дает точно такую ​​же величину, что и статический, но он работает только тогда, когда я поменять переменную в функции со статическим текстом. Может кто-то мне помочь, пожалуйста?

Представленный HTML:

<input type="hidden" name="ctl00$hdnCountdownDate" id="hdnCountdownDate" value="2016,12,25,'10:00'"> 

Я попытался разделив переменные countdowndate в это consistuent переменные, как так, но sitll не работает;

var countdowndate = document.getElementById('hdnCountdownDate').value; 
var resarray = countdowndate.split(","); 
$(".count-down").ccountdown(resarray[0],resarray[1],resarray[2],resarray[3]); 

Функция JS есть;

(function($) { 
$.fn.ccountdown = function(_yr, _m, _d, _t) { 
    var $this = this; 
    var _montharray = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec") 
    var _today = new Date(); 
    // calling function first time so that it wll setup remaining time 
    var _changeTime = function() { 
     var _today = new Date(); 
     var _todayy = _today.getYear(); 
     if (_todayy < 1000) 
      _todayy += 1900; 
     var _todaym = _today.getMonth(); 
     var _todayd = _today.getDate(); 
     var _todayh = _today.getHours(); 
     var _todaymin = _today.getMinutes(); 
     var _todaysec = _today.getSeconds(); 
     _todaysec = "0" + _todaysec; 
     _todaysec = _todaysec.substr(_todaysec.length - 2); 
     var _todaystring = _montharray[_todaym] + " " + _todayd + ", " + _todayy + " " + _todayh + ":" + _todaymin + ":" + _todaysec; 
     var _futurestring = _montharray[_m - 1] + " " + _d + ", " + _yr + " " + _t; 
     /* calculation of remaining days, hrs, min, and secs */ 
     _dd = Date.parse(_futurestring) - Date.parse(_todaystring); 
     _dday = Math.floor(_dd/(60 * 60 * 1000 * 24) * 1); 
     _dhour = Math.floor((_dd % (60 * 60 * 1000 * 24))/(60 * 60 * 1000) * 1); 
     _dmin = Math.floor(((_dd % (60 * 60 * 1000 * 24)) % (60 * 60 * 1000))/(60 * 1000) * 1); 
     _dsec = Math.floor((((_dd % (60 * 60 * 60 * 1000 * 24)) % (60 * 60 * 1000)) % (60 * 1000))/1000 * 1); 
     var el = $($this); 
     var $ss = el.find(".second"), $mm = el.find(".minute"), $hh = el.find(".hour"), $dd = el.find(".days"); 
     $ss.val(_dsec).trigger("change"); 
     $mm.val(_dmin).trigger("change"); 
     $hh.val(_dhour).trigger("change"); 
     $dd.val(_dday).trigger("change"); 
}; 
    _changeTime(); 
    setInterval(_changeTime, 1000); 
}; 

})(jQuery); 
+1

Вы уверены, что знаете ASP.NET, что хорошо? Если бы вы это сделали, вы бы знали, что 'hdnCountdownDate' не будет фактическим HTML-кодом для вашего скрытого поля. –

+0

Да, но я знаю, но предупреждение показывает правильное значение в скрытом поле, даже если я его сменил на var countdowndate = document.getElementById ('<% = hdnCountdownDate.ClientID%>'). Value; он вообще не работает –

+0

@AlastairW используйте parseInt как –

ответ

0

Вам необходимо пройти 4 аргументы .ccountdown(): год, месяц, день и время строки.

В коде вы передаете только один аргумент, который является строкой, взятой из ввода.

+0

Спасибо за ответ, я включил часть кода, объявляющую переменные, определенно передано 4 переменных, 3 целых числа, а время - строка. –

+0

Я гарантирую вам, что вы определенно передаете один аргумент здесь: '$ (". Count-down "). Ccountdown (countdowndate);', not 4. –

+0

Я понимаю, что вы имеете в виду. Передаваемая переменная является одной переменной, хотя она является разделенной запятой строкой с 4 переменными, содержащимися в ней. Я разделил их на массив и передал каждый, но это тоже не работает. Я сделал все правильно? См. Править выше –

Смежные вопросы