Ответы пользователя по тегу JavaScript
  • Сборник примеров регулярных выражений?

    @m-haritonov
    regexlib.com/DisplayPatterns.aspx

    P.S.: думаю, что описанные Вами проблемы можно решить с помощью подмасок:
    console.log(('axxx'.match(/(.)xxx/) || [])[1]); // Находит один любой символ, стоящий перед строкой "xxx"
    Ответ написан
  • Можно ли использовать изображение пользователя, не загружая его на сервер?

    @m-haritonov
    Доступ к файлам, выбранным в <input type="file" /> осуществляется через File API.

    Спецификация File API от W3C.
    Обзорная статья про File API.
    Поддержка File API браузерами.
    Ответ написан
    Комментировать
  • Нужна ли веб-программисту высшая математика?

    @m-haritonov
    Математика вторична. Зная соответствующие спецификации и программные средства, но не зная математики — Вы сможете сделать сайт. Зная математику, но не зная соответствующих спецификаций и программных средств — нет. Математика, думаю, конечно же будет полезна... как и знание дизайна, типографии, библиотековедения, лингвистики, психологии, физики, схемотехники, истории, социологии, политологии и т.п.

    Одни говорят, что веб-программмисту нужна высшая математика... Один мне говорит, после заданного вопроса: "Ну попробуй без математики в веб пойти..."

    Попросите их сделать сайт (или показать готовые работы). Если результат будет положительным, то узнайте у них какие области математики они использовали в своей работе (и с нами поделитесь).
    Ответ написан
  • Как сделать возможность отметки о месте загружаемой фотографии?

    @m-haritonov
    Используйте JavaScript и Geolocation API:
    if ('geolocation' in navigator)
    {
    	navigator.geolocation.getCurrentPosition(function(location){
    		console.log(location.coords.latitude);
    		console.log(location.coords.longitude);
    		console.log(location.coords.altitude);
    		console.log(location.coords.accuracy);
    		console.log(location.coords.altitudeAccuracy);
    		console.log(location.coords.heading);
    		console.log(location.coords.speed);
    		console.log(location.timestamp);
    	});
    }
    Ответ написан
    Комментировать
  • Правильное сохранение объектов javascipt?

    @m-haritonov
    1. Порядок выполнения инструкций будет следующим:
    var myjsonarr=new Array(); // 1
           $.getJSON(url, function (data) {
                    myjsonarr=data; // 5
            }); // 2
            console.log("мой вывод"); // 3
            console.log(myjsonarr); // 4


    Поэтому выполнять "console.log(myjsonarr)" надо в другом событии (например, во время клика по ссылке, который выполняется уже после того, как была вызвана callback функция, переданная в getJSON).

    2. Приведённый Вами кусок кода должен выводить в консоль не "undefined", а "[]".
    3. Если Вы хотите сохранить переменную просто для дальнейшего использования, то Вы правильно сохраняете переменную, просто console.log слишком рано:
    <!DOCTYPE html>
    <html>
    <head>
    	<script src="http://code.jquery.com/jquery-2.1.1.min.js" type="text/javascript"></script>
    	<script type="text/javascript">
    	$(function(){
    		// Присваивать массив данной переменной нужно лишь в случае,
    		// если ниже будет код "myjsonarr.push(data)" а не "myjsonarr = data"
    		var myjsonarr;
    		
    		$.getJSON('getjson.php', function (data) {
    			myjsonarr = data;
    		});
    		
    		// На данный момент новое значение ещё не присвоено переменной myjsonarr
    		console.log(myjsonarr);
    		
    		$('a').click(function(){
    			// А когда пользователь, подождав немного, кликнет на ссылку,
    			// переменная уже будет содержать новое значение
    			console.log(myjsonarr);
    		});
    	});
    	</script>
    </head>
    <body>
    	<a href="#">Вывести объект</a>
    </body>
    </html>


    Если же Вы хотите вызывать код построения таблицы и в вызове getJSON и из другого места, то можно поступить примерно следующим образом:
    <!DOCTYPE html>
    <html>
    <head>
    	<script src="http://code.jquery.com/jquery-2.1.1.min.js" type="text/javascript"></script>
    	<script type="text/javascript">
    	$(function(){
    		function showRows(data)
    		{
    			$("#jsondata").html("");
    			$.each(data.planer, function(i, planer){
    				var newRow = "<tr>"
    				+ "<td class='td_id'>" + planer.idPlaner + "</td>"
    				+ "<td class='td_date'>" + planer.DatePlaner + "</td>"
    				+ "<td class='td_time'>" + planer.TimePlaner + "</td>"
    				+ "</tr>";
    					
    				$(newRow).appendTo("#jsondata");
    			});
    		}
    		
    		var myjsonarr;
    		$('a').click(function(){
    			if (myjsonarr)
    				showRows(myjsonarr);
    			else
    			{
    				$.getJSON('getjson.php', function(data){
    					myjsonarr = data;
    					showRows(myjsonarr);
    				});
    			}
    		});
    	});
    	</script>
    </head>
    <body>
    	<a href="#">Вывести объект</a>
    	<table id="jsondata"></table>
    </body>
    </html>
    Ответ написан
    2 комментария
  • Каким образом вы изучаете исходный код?

    @m-haritonov
    1. Узнаю в рамках какой систему будет запускаться программа, исходный код которой я изучаю.
    2. Узнаю как происходит запуск программ в данной системе (ищу точки возможного входа в программу).
    3. Прослеживаю пути следования данных, которые поступают в точки входа программы.
    4. Ищу точки выхода программы (грубо говоря — участки кода, которые выполняют действия, выходящие за пределы изменения оперативной памяти программы (запись данных в постоянную память (файл на жёстком диске, база данных и т.п.), передача данных по сети, вывод данных в выходной поток и т.п.)).
    Ответ написан
    Комментировать
  • Как защитить сайт от прямого перехода?

    @m-haritonov
    <!DOCTYPE html>
    <html>
    <head>
    	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
    	<title></title>
    	<script type="text/javascript">
    		if (window.top === window)
    			window.top.location = 'http://vk.com/app123456';
    	</script>
    </head>
    <body>
    test
    </body>
    </html>
    Ответ написан
    1 комментарий
  • Таблицы many-to-many и админка?

    @m-haritonov
    Вместо <select multiple> можно использовать множество checkbox'ов:
    <form action="?" method="post">
    	<ul>
    		<li><label><input type="checkbox" name="goods[]" value="132"  /> Товар 1</label></li>
    		<li><label><input type="checkbox" name="goods[]" value="234"  /> Товар 2</label></li>
    		<li><label><input type="checkbox" name="goods[]" value="465"  /> Товар 3</label></li>
    	</ul>
    	
    	<button type="submit">Отправить</button>
    </form>
    
    <pre>
    <?php
    var_dump(@$_POST['goods']); // При выборе первых двух галочек будет содержать: array(132, 234)
    ?>
    </pre>
    Ответ написан
  • Как вырасти из верстальщика в JS-программиста?

    @m-haritonov
    Думаю для этого Вам стоит изучить модель работы браузера и протокола HTTP, понять какое место в этой модели занимает JavaScript (а также HTML и CSS) и, собственно, изучить стандарт языка и окружение, в котором JavaScript работает в браузере (DOM и т.п.).

    Модель работы HTTP и браузера можно представлять в виде процессов, которые преобразуют одни данные в другие и каждый из которых протекает в рамках других, более глобальных процессов (существующих в конечном итоге в рамках физических процессов, происходящих в окружающем нас мире).

    В общем грубую модель работы HTTP и браузера можно описать нижеследующим образом.

    Один компьютер (сервер) посылает другому компьютеру (клиенту), в ответ на его запрос, набор данных (HTTP заголовки ответа и тело HTTP ответа: HTML, CSS, JavaScript код). Все эти данные могут быть сгенерированы динамически (например, с помощью PHP), но на работу браузера это не влияет (т.к. он получает лишь сгенерированный, статический набор данных).

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

    Сначала он просматривает заголовки HTTP ответа, а затем приступает к просмотру и выводу тела HTTP ответа (в заголовках ответа содержится, в частности, указание на то, какие данные находятся в теле запроса и, соответственно, как их выводить).

    В случае, если тип данных будет "text/plain" (т.е. обычный текст), то браузер выведет его на экран как обычный текст (без всякого форматирования и анализа: не будет искать в нём HTML теги, не будет искать участки JavaScript кода и затем исполнять их и т.п.).

    В случае же, если тип данных будет "text/html" (т.е. HTML страница), то браузер не просто выведет на экран тело ответа и исходном виде, а будет искать в нём специальные символы, которые сами выводиться не будут, а будут изменять формат вывода связанного с ними текста.

    Например.

    Если браузер встречает в просматриваемом тексте HTML тег, то на экран будет выведен содержащийся в теге текст, выделенный в соответствии с договорённостью (между разработчиками браузера и разработчиками HTML страниц) о форме вывода данного тега.

    Если браузер встречает участок с CSS кодом (тег , например), то он переключается в режим разбора CSS кода и сохраняет результат разбора у себя в памяти, чтобы затем выделять текст во встречающихся тегах уже в соответствии с правилами, содержащимися в этом участке CSS кода.

    Если браузер встречает участок JavaScript кода, то он переключается в режим разбора JavaScript кода и действует уже в соответствии с новыми правилами (правилами разбора JavaScript, а не HTML кода). Например, если в JavaScript коде встречается инструкция, для вывода текста прямо сейчас ("document.write"), то на экран пользователя выведется результат выполнения этой инструкции. А, если встречается инструкция для объявления функции, то браузер прямо сейчас ничего на экран выводить не будет, а сохранит эту функцию для дальнейшего использования (например, эта функция может быть вызвана, когда произойдёт какое-либо событие).

    Т.е. браузер является бесконечно работающим процессом, который выводит что-то на экран пользователя (т.к. именно отобразить страницу пользователю является его целью) как при первой загрузке страницы так и при возникновении каких-либо событий уже после загрузки страницы (клик мыши, исполнение JavaScript кода, который содержался в функции, которая вызывалась при первой загрузке и продолжала бесконечно вызывать сама себя через определённый промежуток времени и т.п.).
    Ответ написан
    Комментировать
  • Как реализовать многоуровневый вложенный запуск функций?

    @m-haritonov
    Для этого, перед вызовом функции fun() в makeGroup значение root надо временно подменить на только что созданную группу. Вот новый код для makeGroup:
    var makeGroup = function(name,fun) {
        var newgroup = new group();
        newgroup.name=name;
        newgroup.status='ok';
        newgroup.stack=[];
        
        var oldRoot = root;
        root = newgroup;
        
        try {
            fun();
        }
        catch(e) {
            newgroup.status=e;
        }
        
        root = oldRoot;
        
        root.stack.push(newgroup);
    }
    
    Ответ написан
    2 комментария