Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   replace не функция для строки? (https://javascript.ru/forum/misc/44558-replace-ne-funkciya-dlya-stroki.html)

Viper 24.01.2014 13:34

replace не функция для строки?
 
Есть jquery плагин http://trentrichardson.com/examples/timepicker/
Его пытаюсь настроить

$('.hasDatetime').timepicker({
	timeFormat: $(this).attr('data-format')
});

html-инпут
<input id="form_length" class="span6 hasDatetime hasDatepicker" type="text" data-format="HH:mm:ss" aria-required="true" required="" value="01:44:00" name="form[length]">


Но получаю ошибку "Error: TypeError: timeFormat.replace is not a function".
Ошибка в следующем:
(timeFormat.replace(/\'.*?\'/g, '').indexOf('Z') !== -1)
и далее по тексту плагина есть ещё несколько таких обработок.

PS!
var time_format = function(obj){
	return $(obj).attr('data-format');
}

$('.hasDatetime').timepicker({
	timeFormat: time_format
});

В таком варианте та же самая ошибка.

Как ему передать параметр-то?

рони 24.01.2014 14:55

Viper,
вариант ...
$('.hasDatetime').timepicker({
    timeFormat: $('.hasDatetime').data('format')
});

Vlasenko Fedor 24.01.2014 15:52

Вообще непонятно зачем вы через класс обращаетесь когда у вас есть ид
<input id="form_length" class="span6 hasDatetime hasDatepicker" type="text" data-format="HH:mm:ss" aria-required="true" required="" value="01:44:00" name="form[length]">
    <script>
alert(form_length.getAttribute("data-format"));
    </script>

Яростный Меч 24.01.2014 16:04

Цитата:

Сообщение от Viper
Ошибка в следующем:
(timeFormat.replace(/\'.*?\'/g, '').indexOf('Z') !== -1)

а чему равно typeof timeFormat ?

Цитата:

Сообщение от Viper
var time_format = function(obj){
    return $(obj).attr('data-format');
}
 
$('.hasDatetime').timepicker({
    timeFormat: time_format
});
В таком варианте та же самая ошибка.

ну здесь-то понятно - timeFormat это функция, у нее нет метода replace

Viper 24.01.2014 16:38

рони,
не помогло. Если инпутов несколько, то срабатывает только на первом, на остальных значение по нулям.
Если заменить класс на this, то в результате значение будет взято только с последнего обработанного инпута и применено к всем.

Poznakomlus,
инпут не один, а несколько.

Яростный Меч,
string.

В самом плагине она объявлена как
var Timepicker = function () {
	this.regional = [];
	this.regional[''] = {
		timeFormat: 'HH:mm',
		...
	};
}

рони 24.01.2014 16:53

Цитата:

Сообщение от Viper
Если инпутов несколько,

нет проблем ... :write:
<!DOCTYPE HTML>

<html>

<head>
  <base href="http://trentrichardson.com/examples/timepicker/" />
  <title>Untitled</title>
  <meta charset="utf-8">
		<link rel="stylesheet" media="all" type="text/css" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
		<link rel="stylesheet" media="all" type="text/css" href="jquery-ui-timepicker-addon.css" />
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
		<script type="text/javascript" src="http://code.jquery.com/ui/1.10.3/jquery-ui.min.js"></script>
		<script type="text/javascript" src="jquery-ui-timepicker-addon.js"></script>
		<script type="text/javascript" src="jquery-ui-sliderAccess.js"></script>
        <script>
      $(function () {
       $('.hasDatetime').each(function (i, el) {
           $(el).timepicker({
               timeFormat: $(el).data('format')
           })
       })
   })
       </script>

</head>

<body>
<input  class="span6 hasDatetime" type="text" data-format="HH:mm:ss" aria-required="true" required="" value="01:44:00" name="form[length]">
<input  class="span6 hasDatetime" type="text" data-format="HH:mm" aria-required="true" required="" value="01:44:00" name="form[length]">
<input  class="span6 hasDatetime" type="text" data-format="HH" aria-required="true" required="" value="01:44:00" name="form[length]">
</body>
</html>

danik.js 24.01.2014 16:59

Цитата:

Сообщение от Viper
$(this).attr('data-format')

Почему ты думаешь что this указывает на элемент .hasDatetime? Из чего это должно следовать? Тем более предположение бредовое если класс hasDatetime имеют несколько элементов.

Используй .each(). Вместо attr('data-format') пиши data('format'), как предложил рони.

Vlasenko Fedor 24.01.2014 17:13

Viper,
если в Timepicker передается элемент, то здесь же и получаете значение атрибутов этого элемента. Из приведенного когда Timepicker не понятно (не видно) где и как вы обрабатываете переданный аргумент timeFormat
и заметьте Timepicker и timepicker
<script>
      a = function(){return 1;}
      A = function(){return 2;}
      alert(a());
      alert(A());
    </script>

Viper 24.01.2014 19:32

рони,
что-то я совсем забыл про цикл :)

Всем спасибо за помощь!


Часовой пояс GMT +3, время: 11:04.