Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 17.07.2015, 11:07
Интересующийся
Отправить личное сообщение для ru_rikki Посмотреть профиль Найти все сообщения от ru_rikki
 
Регистрация: 25.02.2015
Сообщений: 24

щас попробую проследовать вашей логике...думаю...
"фичи для инвалидов" сейчас походу и жилье заставят строить с фичами для инвалидов, полюбому в 214-фз заставят в обязательном порядке оборудовать все помещения под инвалидов, что сделает себестоимость еще дороже, у меня за 5лет не было ни одного клиента инвалида. Хотя если вы профессиональный прогер то лучше наловчиться их прикручивать, больше шансов взять госзаказ

kostyanet

validate=function(e)
что такое: e ?
и validate= ??

e - это по-видимому el?

Последний раз редактировалось ru_rikki, 17.07.2015 в 12:31.
Ответить с цитированием
  #22 (permalink)  
Старый 17.07.2015, 14:31
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от ru_rikki
validate=function(e)
e - это аргумент для передачи объекта event. То есть он всегда передается первым в списке при сгорании запрограммированного события, но чтобы его получить надо предусмотреть переменную для связи.

ЗЫ Не по теме. Если мы наладим жизнь инвалидов, стать инвалидом будет не страшно, а может быть даже привлекательно и почетно и в таком роде. Несомненно так и случится. Люди начнут с удовольствием становиться инвалидами чтобы пожить в свое удовольствие.

Да, в этом суровая правда - стать инвалидом должно быть страшно. Тяготы инвалидов должны пугать. И поэтому инвалид может жить нормально только если у него есть деньги. То есть их надо зарабатывать чтобы на всякий случай. Вот и все.
Ответить с цитированием
  #23 (permalink)  
Старый 17.07.2015, 14:36
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от ru_rikki
и validate= ??
Это метод объекта. В объект заворачивается поле формы. Ну как заворачивается, связывается по имени, только и всего. Мы можем и так его найти - как элемент, а можем через объект у которого есть методы.

Я показал только один, там еще есть файловый - капец наворченный и небольшой для работы с кодами символов (ну там всякие типа иконки-картинки), которые кагбе текст, но в то же время не текст. На стороне сервера типов больше, ибо на жабе например не нужны пароли и даты - даты у меня строками, а на сервере под все - свой класс.
Ответить с цитированием
  #24 (permalink)  
Старый 17.07.2015, 14:51
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Я когда писал эти классы и скрипты пытался найти готовые решения, чтоб велик не изобретать - фига-то, - пришлось изобретать. Попадался бред той или иной степени тяжести. Ну вот, у вас я вижу такой кусок кода

$RIA_number = array(
	'simpleInGr' => '1', 
	'pTxt' => $locale['search103'],
	'pClass' => 'text-muted',
	'inputName' => 'on_number', 
	'divClass' => 'input-group',
	'spanTitle' => $locale['search104'],
	'inputClass' => 'form-control text-center', 
	'value' => '',
	'maxlength' => '20', 
	'placeholder' => $locale['search105'], 
	'js' => "onClick=\"clearInput(this, 'input-group', '');\" onKeyup=\"RikkiValidation(this, numberSet);\"", 
	'readonly' => ''
);


Который стопудово не принадлежит только типу number, а значит можно сделать базовый класс и наследоваться с него всем остальным кто разделяет эти опции.

Откуда у вас это? С такого массива элементарно отрендерить input. Правда всяких опций по рендеру многовато, так не делается, ну это не важно. Если не рендерить поля, то можно передать объект как таковой, через json, например:

<script><?php echo json_decode($RIA_number);?></script>


Добавить туда еще паттерн и в скрипте сразу будет лежать база с которой можно взять и отрендерить форму, чтобы сервер не напрягать, поскольку он все равно json отдал.

Да, как наследоваться. В рамках массивов - через слияние:

$_common = array(
	'pClass' => 'text-muted',
	'divClass' => 'input-group',
	'inputClass' => 'form-control text-center', 
	'value' => '',
	'maxlength' => '20', 
	'readonly' => ''
);

$RIA_number = array_merge($_common, array(
	'simpleInGr' => '1', 
	'pTxt' => $locale['search103'],
	'inputName' => 'on_number', 
	'spanTitle' => $locale['search104'],
	'placeholder' => $locale['search105'], 
	)
);
Ответить с цитированием
  #25 (permalink)  
Старый 17.07.2015, 17:00
Интересующийся
Отправить личное сообщение для ru_rikki Посмотреть профиль Найти все сообщения от ru_rikki
 
Регистрация: 25.02.2015
Сообщений: 24

Сообщение от kostyanet Посмотреть сообщение
echo json_decode($RIA_number);
это типо замена $i=0; while($i++<2) echo $RIA_number; только на стороне клиента ?

я поняла вашу функцию, она не привязана к верстке в отличие от моей и годится на все типы полей от input до select, моя функция просто одно значение массива вашей функции, конкретно для Input, просто у меня пока не было надобности валидировать select на js, а для валидации чекбоксов, у меня другая функция с завязкой на php для безопасности,
function RikkiCbxInLnk(element, link, linktype, erlink, digit, arr) {
    var num = 0;
    var l = '';
    for (var i = 0; i < element.elements.length; i++) {
        var v = element.elements[i].value;
        if (element.elements[i].type == 'checkbox') {
            if (element.elements[i].checked === true) {
                num++;
                if ($.trim(v) != '000') {
                    if (num <= digit) {
                        if ($.inArray(v, arr) != -1) {
                            l += linktype + num + '=' + $.trim(v);
                            window.location.href = link + l;
                        } else {
                            window.location.href = erlink;
                        }
                    }
                } else if (num == 1) {
					for (var j = 0; j < element.elements.length; j++) {
                        if (element.elements[j].checked === true) {
                            element.elements[j].checked = false;
                        }
                    }
                    window.location.href = link + linktype + '1=000';
                }
            }
        }
    }
    return false;
}
(здесь тоже на асмассив перейду)
останусь при своей функции
заинтересовало:
а почему именно throw а не алерт?

Последний раз редактировалось ru_rikki, 17.07.2015 в 18:11.
Ответить с цитированием
  #26 (permalink)  
Старый 17.07.2015, 20:27
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от ru_rikki
с завязкой на php для безопасности,
Щито? Вы что решили будто бы валидация на браузере избавляет вас от валидации на сервере?

1) - для удобства клиента, не более того и чуть-чуть для экономии ресусрсов сервера, ну что бы не гонять тупизну туда-сюда.

2) - для безопасности, для правильности и еще раз для безопасности.

Аксиома: абсолютно ничего нельзя проверить в браузере. Потому что браузера вообще может не быть. Вам из любой проги напихают заголовков в сервер и все.
Ответить с цитированием
  #27 (permalink)  
Старый 17.07.2015, 20:33
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от ru_rikki
она не привязана к верстке в отличие от моей
Она конкретно привязана к верстке, потому что все данные берутся из нее, а ее делает сервер.

Вы просто терминологией не владеете. Это называется - уровень абстракции. В ваших дошираках он низкий - вы пишите конкретную функцию на каждое поле. А я показываю уровень повыше - когда данные нормализованы и одна и та же "функция" может проверить по ним любое поле. В кавычках потому что функций тоже много, просто над ними надстройка в виде еще одной извилины которая понимает какое поле и что с ним делать надо.

Вам это вообще зачем надо? Найдите программиста, расскажите что надо сделать и он вам за неделю все сделает. Блин, да готовое приспособит из своих сусеков.

Нормальное программирование всегда стремится к определению факта в одном месте и максимальному реюзу этих фактов в разных местах. Например вот самый короткий пример (чтобы не растягивать мессагу) объекта для поля пароля

<?php
class FormPassword extends FormField {

	public function __construct($data=array()) {
		$this->_d=array_merge(
			array('cap'=>'Пароль',
				'pattern'=>'^[\x20-\x7e]*$',
				'errmsg'=>'вводите только печатные символы',
				'required'=>3),$data);
		$this->set_name();
	}
	protected function before_render(){
		$this->_d=array_merge($this->_d,
			array('title'=>'Показать пароль',
			'onkeyup'=>'{this.title=this.value}',
			'value'=>null));
	}
	public function prepare(&$link){
		return $link->password($this->value);
	}
}


В свою очередь FormField extends FormTag - ниже по иерархии, а все этой категории (формы) объекты входят в коллекцию объекта ActiveForm, который тоже там extends пару раз, в том числе от объекта таблицы бд, которая превращается в объект специальным скриптом и затем кастомизируется.

Зачем все эти навороты? Затем что в бд уже дофига чего определено, например там есть разница между текстовым и числовым отношением, есть разница между числовыми полями, даты, списки и тп. Повторять все эти сущности вручную в скрипте не имеет смысла, можно стянуть с бд и перевести на сущности веб-интерфейса.

Я процитирую только запрос, с результатов которого затем делается объект, затем кастомизируется в модели, в частности к полям добавляются нормальные названия, скажем вместо tel - Телефон, опции рендера, паттерны те самые и прочие опции.

$q='select `table_name`,`column_name`,`data_type` as `dtype`,
		coalesce(`character_maximum_length`,`numeric_precision`) as `maxlength`,
		`numeric_scale` as `decimals`,
		`column_key`, 
		(`is_nullable`="NO" && `column_default` is NULL) as `required`,
		`column_default` as `value`,
		`column_type` as `data`
		from `information_schema`.`columns` 
		where `table_schema`="'.$this->db_name.'" 
		and `table_name`="'.$table_name.'"';


Достаточно испугал? А я ведь тоже не программист, я - дизайнер, мое дело вообще-то - ФШ, Корел и Люстра. Представьте _ЧТО_ пишут настоящие программисты (а не лопухи с этого форума) и какой уровень абстракции они могут задать и какой уровень сервиса обеспечить и вам сразу перехочется самой что-то там изобретать.

Словом от такого вот запроса через массу объектов на сервере данные попадают в браузер в виде хтмл-формы и оттуда валятся данные в те же самые объекты которые их и проверяют согласно своим свойствам, методам, логике и полученным данным.

Это и называется - ООП.

Последний раз редактировалось kostyanet, 17.07.2015 в 21:25.
Ответить с цитированием
  #28 (permalink)  
Старый 17.07.2015, 21:07
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от ru_rikki
а почему именно throw а не алерт?
А почему напильник, а не синий? Потому что алерт это функция, а троу - исключение или прерывание. Зачем мне алерты? Чтобы они на каждую ошибку выскакивали и вопили а вот тут еще неправильно? Троу выкидывает скрипт в рендер ошибки, ошибка рендерится и проверяется следующее поле и так пока все не проверит. Юзер видит красные рамочки, соображает что не так, читает подсказку, исправляет, рамочки сами по себе исчезают если все ок и если вообще все ок - загорается кнопка "ОТПРАВИТЬ".

Короче, вот есть дохлый сайт с такой формой, зайдите проверьте svet-exclusive.ru/contacts/comeback - во избежание отправки в контору введите заведомо неправильную капчу чтобы посмотреть как сработает прерывание на сервере. Там точно такая же система, ну конечно средствами php.
Ответить с цитированием
  #29 (permalink)  
Старый 17.07.2015, 21:11
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

throw или exception - это нелокальный goto
Ответить с цитированием
  #30 (permalink)  
Старый 17.07.2015, 21:29
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от ru_rikki
то типо замена $i=0; while($i++<2) echo $RIA_number; только на стороне клиента ?
Вопроса не понял, но если вам в браузере нужен массив данных по всем полям, а на сервере есть такой массив - как вы показали для одного поля - то выдать этот массив в браузер как массив можно через json

<script>var Fields=<?php echo json_encode($fields);?>;</script>


Теперь в скрипте в своем берете этот Fields, который объект и достаете из него все что было на сервере нарисовано.

var a_number=Fields.a_number;
console.log(a_number.name); // выведет имя поля
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
innerHTML для TR в InternetExplorer не работает? Непонятливый Элементы интерфейса 3 15.10.2012 17:14
JS: работает на сервере, не работает из папки -majestic- Общие вопросы Javascript 2 02.08.2012 14:41
Не работает push! Динамическая вставка TSEH25 ExtJS 5 03.07.2012 13:00
jQyery функция странно работает! Midel Общие вопросы Javascript 4 08.04.2012 13:40
помогите найти ошибку (работает в IE но не работает в Firefox) Len4ik Javascript под браузер 2 11.05.2010 15:41