<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>В лабиринте извилин &#187; jQuery</title>
	<atom:link href="http://www.charnad.com/blog/tag/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.charnad.com</link>
	<description>Блог-центр им. CharnaD</description>
	<lastBuildDate>Wed, 18 Jan 2012 14:52:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Модальное окно на jQuery blockUI</title>
		<link>http://www.charnad.com/blog/modalnoe-okno-na-jquery-blockui/</link>
		<comments>http://www.charnad.com/blog/modalnoe-okno-na-jquery-blockui/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 18:53:35 +0000</pubDate>
		<dc:creator>CharnaD</dc:creator>
				<category><![CDATA[JS]]></category>
		<category><![CDATA[blockUI]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[модальное окно]]></category>

		<guid isPermaLink="false">http://www.charnad.com/?p=930</guid>
		<description><![CDATA[Создание модального диалога с помощью jquery плагина blockUI.]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.charnad.com/blog/wp-content/uploads/pictures/blockui/blockui-modal.png" style="float: left; margin-right: 10px;">Я уже писал про создание модальных окон на jQuery с помощью Simplemodal, на этот раз я решил попробовать другой плагин и нашел для себя blockUI. Он потребует jQuery версии не ниже 1.2.3. Итак приступим.<span id="more-930"></span></p>
<p>Данные плагина:</p>
<ul>
<li>название: blockUI v2</li>
<li>размер: 15,6 кб без сжатия</li>
<li><a href="http://www.malsup.com/jquery/block/">сайт плагина</a>, <a href="http://github.com/malsup/blockui/raw/master/jquery.blockUI.js?v2.31">скачать</a>, <a href="http://www.malsup.com/jquery/block/#demos">демо</a></li>
</ul>
<p>На сайте разработчика он выглядит так:<br />
<img class="size-medium wp-image-79" src="http://www.charnad.com/blog/wp-content/uploads/pictures/blockui/blockui-demo.png" alt="" /></p>
<p>Для себя я подобрал определенные настройки, которые делают окна красивее. Во-первых, я хотел, чтобы модальное окно располагалось по центру экрана, а по умолчанию оно находится чуть левее. Во-вторых, я хотел сделать его похожим на модальные окна и дилалоги в Windows.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$.<span style="color: #660066;">blockUI</span>.<span style="color: #660066;">defaults</span>.<span style="color: #660066;">css</span>.<span style="color: #660066;">border</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'0px'</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//убираем серую границу</span>
$.<span style="color: #660066;">blockUI</span>.<span style="color: #660066;">defaults</span>.<span style="color: #660066;">fadeIn</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">100</span><span style="color: #339933;">;</span>  <span style="color: #006600; font-style: italic;">//ускоряем появление</span>
$.<span style="color: #660066;">blockUI</span>.<span style="color: #660066;">defaults</span>.<span style="color: #660066;">fadeOut</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">100</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//и исчезновение</span>
$.<span style="color: #660066;">blockUI</span>.<span style="color: #660066;">defaults</span>.<span style="color: #660066;">css</span>.<span style="color: #660066;">left</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'40%'</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//окно будет в центре</span></pre></div></div>

<p>Этот код нужно вставить в страницу после подключения плагина. Параметр left:40% зависит от ширины окна, в моем случае оно 275 пикселей.</p>
<p>Что же сделать, чтобы окно выглядело как в Windows? Я конечно не мастер верстки, но результат мне вполне подходит. Сначала делаем макет окна и даем ему стили.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;modal_dialog&quot;</span> <span style="color: #000066;">style</span>=<span style="color: #ff0000;">&quot;display:none; cursor: default&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;dialog&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;dialog_title_bar&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;dialog_caption&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>www.charnad.com<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;rotes_kreuz&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;dialog_pane&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Наше модальное окошко<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div</span> <span style="color: #000066;">style</span>=<span style="color: #ff0000;">&quot;margin-top: 10px;&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;form</span> <span style="color: #000066;">action</span>=<span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #000066;">method</span>=<span style="color: #ff0000;">&quot;POST&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;input</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;yes&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;Да&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;dialog_button&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;input</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;button&quot;</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;no&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;Нет&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;close_dialog dialog_button&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/form<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Почему display: none? Потому что плагин автоматически переключит видимость. Теперь CSS:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #6666ff;">.dialog</span> <span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">cursor</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">default</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#000000</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #6666ff;">.dialog</span> form <span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #933;">0px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* Контейнер с заголовком */</span>
<span style="color: #6666ff;">.dialog</span> <span style="color: #6666ff;">.dialog_title_bar</span> <span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">17px</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1px</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">background-image</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000; font-style: italic;">dialog-caption-bg.png</span><span style="color: #00AA00;">&#41;</span> <span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* Стиль текста заголовка */</span>
<span style="color: #6666ff;">.dialog</span> <span style="color: #6666ff;">.dialog_title_bar</span> <span style="color: #6666ff;">.dialog_caption</span> <span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">black</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">font-family</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">sans-serif</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> <span style="color: #933;">9pt</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">text-align</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">left</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">padding-left</span><span style="color: #00AA00;">:</span> <span style="color: #933;">5px</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">padding-top</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* Панель диалога */</span>
<span style="color: #6666ff;">.dialog</span> <span style="color: #6666ff;">.dialog_pane</span> <span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> buttonface<span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">text-align</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">center</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">padding-left</span><span style="color: #00AA00;">:</span> <span style="color: #933;">10%</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">padding-right</span><span style="color: #00AA00;">:</span> <span style="color: #933;">10%</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">padding-top</span><span style="color: #00AA00;">:</span> <span style="color: #933;">10px</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">padding-bottom</span><span style="color: #00AA00;">:</span> <span style="color: #933;">10px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* Кнопки диалога */</span>
<span style="color: #6666ff;">.dialog</span> <span style="color: #6666ff;">.dialog_button</span> <span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">80px</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">25px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* Красный крест, закрывающий окно */</span>
<span style="color: #6666ff;">.dialog</span> <span style="color: #6666ff;">.rotes_kreuz</span> <span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">background-image</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000; font-style: italic;">rotes_kreuz.png</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">28px</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">15px</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">absolute</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">right</span><span style="color: #00AA00;">:</span> <span style="color: #933;">3px</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">:</span> <span style="color: #933;">3px</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">float</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">right</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">block</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">cursor</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">pointer</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Пути к картинкам, конечно же, поставьте свои. Сами картинки можно взять: <a href="http://www.charnad.com/blog/wp-content/uploads/pictures/blockui/dialog-caption-bg.png">фон заголовка</a>, <a href="http://www.charnad.com/blog/wp-content/uploads/pictures/blockui/rotes_kreuz.png">крест</a>.</p>
<p>Теперь Javascript, чтобы все у нас прыгало и бегало.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">//По этим кнопкам модальное окно закрывается</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.rotes_kreuz, .close_dialog'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        $.<span style="color: #660066;">unblockUI</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">//Эта кнопка будет вызывать наше окно</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#show_modal'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        $.<span style="color: #660066;">blockUI</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>message<span style="color: #339933;">:</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#modal_dialog'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> css<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>width<span style="color: #339933;">:</span> <span style="color: #3366CC;">'275px'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">//По кнопке &quot;Да&quot; будет отправляться форма </span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#modal_dialog #yes'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#modal_dialog form'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">submit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Можно скачать:[filebase:file:file=3:tpl=simple] или посмотреть прямо здесь.<br />
<input type="button" id="show_modal" value="Показать модальное окно">
<script type="text/javascript" src="http://www.charnad.com/files/blockui-modal-demo/jquery.blockUI.js"></script><script type="text/javascript">$.blockUI.defaults.css.border = '0px';$.blockUI.defaults.fadeIn = 100;$.blockUI.defaults.fadeOut = 100;$.blockUI.defaults.css.left = '40%';$(document).ready(function() {$('.rotes_kreuz, .close_dialog').click(function() {$.unblockUI();return false;});$('#show_modal').click(function() {$.blockUI({message: $('#modal_dialog'), css: {width: '275px'}});});$('#modal_dialog #yes').click(function() {alert('Да!');});});</script></p>
<style type="text/css">.dialog {cursor: default;border: 1px solid #000000;}.dialog form {margin: 0px;}.dialog .dialog_title_bar {height: 17px;padding: 1px;background-image: url(http://www.charnad.com/files/blockui-modal-demo/dialog-caption-bg.png) ;}.dialog .dialog_title_bar .dialog_caption {color: black;font-family: sans-serif;font-size: 9pt;text-align: left;padding-left: 5px;padding-top: 1px;}.dialog .dialog_pane {background: buttonface;text-align: center;padding-left: 10%;padding-right: 10%;padding-top: 10px;padding-bottom: 10px;}.dialog .dialog_button {width: 80px;height: 25px;}.dialog .rotes_kreuz {background-image: url(http://www.charnad.com/files/blockui-modal-demo/rotes_kreuz.png);width: 28px;height: 15px;position: absolute;right: 3px;top: 3px;float: right;display: block;cursor: pointer;}</style>
<div id="modal_dialog" style="display:none; cursor: default" class="dialog">
<div class="dialog_title_bar">
<div class="dialog_caption">www.charnad.com</div>
<div class="rotes_kreuz"></div>
</div>
<div class="dialog_pane">
<div>Наше модальное окошко</div>
<div style="margin-top: 10px;">
<form action="" method="POST">
<input type="button" id="yes" value="Да" class="dialog_button"/>
<input type="button" id="no" value="Нет" class="close_dialog dialog_button" /></form>
</div>
</div>
</div>
<p>При желании, вы легко можете добавлять поля в форму диалога. У этого плагина есть еще одна интересная черта - оповещения типа Growl (оповещение вверху справа), о котором я надеюсь написать в следующий раз.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.charnad.com/blog/modalnoe-okno-na-jquery-blockui/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<item>
		<title>Судоку на PHP и jQuery</title>
		<link>http://www.charnad.com/blog/sudoku-na-php-i-jquery/</link>
		<comments>http://www.charnad.com/blog/sudoku-na-php-i-jquery/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 16:06:22 +0000</pubDate>
		<dc:creator>CharnaD</dc:creator>
				<category><![CDATA[JS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.charnad.com/?p=800</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><iframe frameborder="0" width="480" height="500" align="center" src="http://dev.charnad.com/sudoku" scrolling="no"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.charnad.com/blog/sudoku-na-php-i-jquery/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Обзор SimpleModal 1.2.2</title>
		<link>http://www.charnad.com/blog/obzor-simplemodal-122/</link>
		<comments>http://www.charnad.com/blog/obzor-simplemodal-122/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 17:47:42 +0000</pubDate>
		<dc:creator>CharnaD</dc:creator>
				<category><![CDATA[JS]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[simplemodal]]></category>
		<category><![CDATA[плагин]]></category>

		<guid isPermaLink="false">http://www.charnad.com/?p=258</guid>
		<description><![CDATA[Ранее я уже писал о хорошем и простом плагине для создания модальных окошек на jQuery. Эта запись стала довольно популярной и многие люди находят ее в поисковиках. С тех пор вышла уже новая версия jQuery SimpleModal 1.2.2. Я списывался с автором Эриком Мартином и он попросил меня проверить, все ли исправлено. Давайте этим и займемся. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-259" title="modal_logo" src="http://www.charnad.com/blog/wp-content/uploads/pictures/simplemodal/modal_logo.png" alt="modal_logo"/>Ранее я уже писал о хорошем и простом плагине для создания <a href="http://www.charnad.com/blog/prostoe-modalnoe-okoshko-na-jquery/">модальных окошек на jQuery</a>. Эта запись стала довольно популярной и многие люди находят ее в поисковиках. С тех пор вышла уже новая версия jQuery SimpleModal 1.2.2. Я списывался с автором Эриком Мартином и он попросил меня проверить, все ли исправлено. Давайте этим и займемся.</p>
<p><span id="more-258"></span></p>
<h4>Fail #1</h4>
<p>Первое, что мы видим - отсутствие обратной совместимости =(.  То есть, если в старые проекты мы скопируем новую библиотеку, то начнутся проблемы. Во-первых мы не увидим наши стили. Эрик переименовал дефолтные id у элементов. Теперь id оверлея у нас 'simplemodal-overlay', id контейнера - 'simplemodal-container', а кнопки 'simplemodal-close'. С одной стороны хорошо, приводится в порядок список id, не будет путаницы с другими плагинами для модальных окон, с другой сейчас начинаются проблемы у тех, кто не разобрался как обновить старые скрипты. На сайте, автор приводит способ, как обеспечить совместимость со старыми css:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">$<span style="color: #339933;">.</span>extend<span style="color: #009900;">&#40;</span>$<span style="color: #339933;">.</span>modal<span style="color: #339933;">.</span>defaults<span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>
  closeClass<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;modalClose&quot;</span><span style="color: #339933;">,</span>
  overlayId<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;modalOverlay&quot;</span><span style="color: #339933;">,</span>
  containerId<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;modalContainer&quot;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Ладно, будем считать разобрались, настроили стили. Запускаем самый простенький тест, взятый из моего прошлого поста про SimpleModal и...</p>
<h4>Fail #2</h4>
<p><a href="http://www.charnad.com/blog/wp-content/uploads/pictures/simplemodal/fail2.png"><img align="left" title="fail2" src="http://www.charnad.com/blog/wp-content/uploads/pictures/simplemodal/fail2_small.png" alt="fail2"/></a> Бум! Нажал на кнопочку ОК и получил дырку в оверлее. Тут надо заметить, что я убрал вспомогательный &lt;div>, который использовал в первый раз. По-видимому без него все-таки не обойтись. В итоге &lt;div> вернул, дырок больше не получаю. Надо заметить, что подобным страдает только Опера (у меня 9.63). Firefox 3, Chrome 1.0.154 и IE7 показали себя с лучшей стороны. Насколько я понял, автор пытался решить эту проблему для Оперы, но по-видимому в 9.63 что-то изменилось и его старания оказались напрасны.</p>
<h4 style="color:green">Success #1</h4>
<p>А вот и первая удача в новой версии. Теперь нам не надо приклеивать плагин Dimensions. Окно позиционируется по центру совершенно самостоятельно. Это очень радует, я пробовал играть с размерами окна и оно всегда было по центру. Одно только замечание. Нельзя давать модальному окну быть больше, чем размер окна браузера. Или хотя бы кнопку для закрытия не уносить. А то сделал я окно высотой в 1000 пикселей, а экран на ноутбуке у меня 800 пикселей высотой. Вот вам и задача, как закрыть модальное окно? В опере я спасаюсь табом, чтобы перейти на кнопку OK, которая присутствует в моих диалоговых окнах и проблел или enter, чтобы закрыть. Не каждый догадается на самом деле.</p>
<h4>Итого что мы имеем</h4>
<p>Помимо всего вышеуказанного, в версии 1.2.2 есть еще изменения(<noindex><a href="http://www.ericmmartin.com/projects/simplemodal/#changes" rel="nofollow"></noindex>ченджлог</a>). Их я проверить не могу. О результатах тестирования Эрику написал, надеюсь он сможет решить проблему с Оперой. Позже я возможно напишу апдейт для своих диалоговых окошек. А здесь все.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.charnad.com/blog/obzor-simplemodal-122/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Простое модальное окно на jQuery</title>
		<link>http://www.charnad.com/blog/prostoe-modalnoe-okoshko-na-jquery/</link>
		<comments>http://www.charnad.com/blog/prostoe-modalnoe-okoshko-na-jquery/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 01:50:22 +0000</pubDate>
		<dc:creator>CharnaD</dc:creator>
				<category><![CDATA[JS]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[плагин]]></category>

		<guid isPermaLink="false">http://www.charnad.com/blog/?p=78</guid>
		<description><![CDATA[Обзор плагина SimpleModal, его глюков, избавление от глючности, позиционирование по центру экрана и прочие удобства. Помимо этой статьи советую посмотреть на более новую "Модальные окна на jQuery blockUI" Начинаем использовать Данные плагина: название: simplemodal размер: 10кб без сжатия автор: Eric Martin сайт: http://www.ericmmartin.com/projects/simplemodal/ скачать: http://simplemodal.googlecode.com/files/jquery.simplemodal-1.1.1.js демо: http://www.ericmmartin.com/simplemodal-test/ Выглядит это дело вот так: Для того чтобы [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.charnad.com/blog/wp-content/uploads/pictures/simplemodal/modal_logo.png" align="left">Обзор плагина SimpleModal, его глюков, избавление от глючности, позиционирование по центру экрана и прочие удобства. Помимо этой статьи советую посмотреть на более новую <a href="http://www.charnad.com/blog/modalnoe-okno-na-jquery-blockui/">"Модальные окна на jQuery blockUI"</a><span id="more-78"></span></p>
<h4>Начинаем использовать</h4>
<p>Данные плагина:</p>
<ul>
<li>название: simplemodal</li>
<li>размер: 10кб без сжатия</li>
<li>автор:<a href="http://www.ericmmartin.com/"> Eric Martin</a></li>
<li>сайт: <a href="http://www.ericmmartin.com/projects/simplemodal/">http://www.ericmmartin.com/projects/simplemodal/</a></li>
<li>скачать:<a href="http://simplemodal.googlecode.com/files/jquery.simplemodal-1.1.1.js"> http://simplemodal.googlecode.com/files/jquery.simplemodal-1.1.1.js</a></li>
<li>демо: <a href="http://www.ericmmartin.com/simplemodal-test/">http://www.ericmmartin.com/simplemodal-test/</a></li>
</ul>
<p>Выглядит это дело вот так:</p>
<div id="attachment_79" class="wp-caption alignnone" style="width: 310px"><a href="http://www.charnad.com/blog/wp-content/uploads/pictures/simplemodal/simplemodal1.png"><img class="size-medium wp-image-79" src="http://www.charnad.com/blog/wp-content/uploads/pictures/simplemodal/simplemodal1_small.png" alt="" width="300" height="146" /></a><p class="wp-caption-text">Вот так выглядит плагин на сайте разработчика</p></div>
<p>Для того чтобы плагин заработал его надо подключить:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;jquery.simplemodal.js&quot;</span> type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>А так же указать стили для овереля (серой области), контейнера (собственно окно) и кнопки закрыть.</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#modalOverlay</span> <span style="color: #00AA00;">&#123;</span> 
  <span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#000</span><span style="color: #00AA00;">;</span>  <span style="color: #808080; font-style: italic;">/* Тут выбираем цвет затемнения */</span> 
  <span style="color: #000000; font-weight: bold;">cursor</span><span style="color: #00AA00;">:</span><span style="color: #993333;">wait</span><span style="color: #00AA00;">;</span>  <span style="color: #808080; font-style: italic;">/* Курсор при наведении на затемненную область */</span> 
  filter<span style="color: #00AA00;">:</span> alpha<span style="color: #00AA00;">&#40;</span>opacity<span style="color: #00AA00;">=</span><span style="color: #cc66cc;">80</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* Интенсивность затемнения */</span> 
  <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">100%</span><span style="color: #00AA00;">;</span> 
<span style="color: #00AA00;">&#125;</span> 
&nbsp;
<span style="color: #cc00cc;">#modalContainer</span> <span style="color: #00AA00;">&#123;</span> 
  <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span><span style="color: #993333;">auto</span><span style="color: #00AA00;">;</span>   <span style="color: #808080; font-style: italic;">/* Для растягивания по высоте */</span> 
  <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span><span style="color: #933;">300px</span><span style="color: #00AA00;">;</span> 
  <span style="color: #000000; font-weight: bold;">left</span><span style="color: #00AA00;">:</span><span style="color: #933;">50%</span><span style="color: #00AA00;">;</span>  <span style="color: #808080; font-style: italic;">/*в купе с margin-left, которая равна минус половине ширины центруют по горизонтали*/</span> 
  <span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">:</span><span style="color: #933;">50%</span><span style="color: #00AA00;">;</span>   <span style="color: #808080; font-style: italic;">/*центрует по вертикали, вместе с margin-top, если задать высоту*/</span> 
  <span style="color: #000000; font-weight: bold;">margin-left</span><span style="color: #00AA00;">:</span><span style="color: #933;">-150px</span><span style="color: #00AA00;">;</span> 
  <span style="color: #808080; font-style: italic;">/* margin-top: -70px; */</span> 
  <span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#fff</span><span style="color: #00AA00;">;</span> 
  <span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span><span style="color: #933;">3px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#ccc</span><span style="color: #00AA00;">;</span> 
  <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span> <span style="color: #933;">10px</span><span style="color: #00AA00;">;</span> 
<span style="color: #00AA00;">&#125;</span>  
a<span style="color: #6666ff;">.modalCloseImg</span> <span style="color: #00AA00;">&#123;</span> 
  <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span><span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000; font-style: italic;">x.png</span><span style="color: #00AA00;">&#41;</span> <span style="color: #993333;">no-repeat</span><span style="color: #00AA00;">;</span> 
  <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span><span style="color: #933;">25px</span><span style="color: #00AA00;">;</span>  <span style="color: #808080; font-style: italic;">/* Положение отличается от тех, что в примере. Мне кажется так удобнее */</span>
  <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span><span style="color: #933;">29px</span><span style="color: #00AA00;">;</span> 
  <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span><span style="color: #993333;">inline</span><span style="color: #00AA00;">;</span> 
  <span style="color: #000000; font-weight: bold;">z-index</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">3200</span><span style="color: #00AA00;">;</span> 
  <span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span><span style="color: #993333;">absolute</span><span style="color: #00AA00;">;</span> 
  <span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">:</span><span style="color: #933;">0px</span><span style="color: #00AA00;">;</span> 
  <span style="color: #000000; font-weight: bold;">right</span><span style="color: #00AA00;">:</span><span style="color: #933;">0px</span><span style="color: #00AA00;">;</span> 
  <span style="color: #000000; font-weight: bold;">cursor</span><span style="color: #00AA00;">:</span><span style="color: #993333;">pointer</span><span style="color: #00AA00;">;</span> 
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>К сожалению в плагине таятся некоторые глюки. Так например в опере, если контент страницы короче чем сама страница, то при закрытии окна внизу остается серая область. А в IE она иногда и вовсе не закрашивается. </p>
<div id="attachment_84" class="wp-caption alignnone" style="width: 310px"><a href="http://www.charnad.com/blog/wp-content/uploads/pictures/simplemodal/simplemodal2.png"><img class="size-medium wp-image-84" src="http://www.charnad.com/blog/wp-content/uploads/pictures/simplemodal/simplemodal2_small.png" alt="Вот так это выглядит в Опере" width="300" height="174" /></a><p class="wp-caption-text">Вот так это выглядит в Опере</p></div>
<p>Однако это решается довольно просто. На страницу необходимо добавить стиль</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#helper</span> <span style="color: #00AA00;">&#123;</span> 
  <span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">absolute</span><span style="color: #00AA00;">;</span> 
  <span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">:</span> <span style="color: #933;">0px</span><span style="color: #00AA00;">;</span> 
  <span style="color: #000000; font-weight: bold;">left</span><span style="color: #00AA00;">:</span> <span style="color: #933;">0px</span><span style="color: #00AA00;">;</span> 
  <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">100%</span><span style="color: #00AA00;">;</span> 
  <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">100%</span><span style="color: #00AA00;">;</span> 
  <span style="color: #000000; font-weight: bold;">z-index</span><span style="color: #00AA00;">:</span> -<span style="color: #cc66cc;">10</span><span style="color: #00AA00;">;</span> 
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>И в любом месте страницы вставляем:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;div id=&quot;helper&quot;&gt;&lt;/div&gt;</pre></div></div>

<p>Этим мы добиваемся перерисовки браузером нашего документа при закрытии модального окна.</p>
<h4>Делаем удобное оповещение</h4>
<p>Сначала добьемся, чтобы окно было посередине страницы. В своем примере я ограничил ширину 300px, а вот высота может меняться. CSS свойство top:50% действительно опускает окно до середины страницы, однако само модальное окно идет как раз ниже середины. Если бы мы указали высоту в пикселях, например 150px, то могли бы поднять окно над центром с помощью margin-top: -75px. Но окно будет резиновым, а мы для этого воспользуемся еще одним плагином: Dimensions.  Данные плагина:</p>
<ul>
<li>название: Dimensions</li>
<li>размер: 3кб без сжатия</li>
<li>сайт: <a href="http://docs.jquery.com/Plugins/dimensions">http://docs.jquery.com/Plugins/dimensions</a></li>
<li>скачать: <a href="http://plugins.jquery.com/files/dimensions_1.2.zip">http://plugins.jquery.com/files/dimensions_1.2.zip</a></li>
<li>демо: <a href="http://brandonaaron.net/docs/dimensions/#code-samples">http://brandonaaron.net/docs/dimensions/#code-samples</a></li>
</ul>
<p>Этот плагин дает нам возможность измерить высоту окна, соответственно и вычислить половину высоты и поднять на это количество пикселей окно над центром веб-страницы.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;jquery.dimensions.js&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Подключили. Теперь открываем редактором файл плагина Simplemodal (jquery.simplemodal.js), да-да, будем исправлять плагин. Если наши версии совпадают, то на строке 294 будет функция open. Идем в самый ее конец, сразу после this.bindEvents(); и до закрывающей фигурной скобки ставим</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#modalContainer'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'margin-top'</span><span style="color: #339933;">,-</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#modalContainer'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">outerHeight</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #CC0000;">2</span><span style="color: #339933;">-</span><span style="color: #CC0000;">50</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Я специально отнял от высоты еще 50 пикселей, мне кажется это добавляет удобства. Но вы можете поэкспериментировать.  Осталось совсем немного.  Добавляем где-нибудь в конце страницы</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>div id<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;message&quot;</span> style<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;display: none; text-align: center;&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>div id<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;messageText&quot;</span><span style="color: #339933;">&gt;</span>текст модального окна<span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;&lt;</span>br <span style="color: #339933;">/&gt;&lt;</span>br <span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>input type<span style="color: #339933;">=</span><span style="color: #3366CC;">'button'</span> value<span style="color: #339933;">=</span><span style="color: #3366CC;">'Ok'</span> <span style="color: #003366; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #3366CC;">'modalClose'</span> style<span style="color: #339933;">=</span><span style="color: #3366CC;">'height: 30px; width: 60px;'</span><span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Заметьте, кнопка имеет class='modalClose'. Вы можете создать в диве любой другой объект с этим классом - клик по нему будет закрывать окно.  Все, приготовления закончены. Осталось его только использовать. Например так:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#messageText'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Это наше окошко!'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#message'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">modal</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>И при загрузке страницы увидим</p>
<div id="attachment_87" class="wp-caption alignnone" style="width: 310px"><a href="http://www.charnad.com/blog/wp-content/uploads/pictures/simplemodal/simplemodal3.png"><img class="size-medium wp-image-87" src="http://www.charnad.com/blog/wp-content/uploads/pictures/simplemodal/simplemodal3_small.png" alt="Наше модальное окно!" width="300" height="174" /></a><p class="wp-caption-text">Наше модальное окно!</p></div>
<p>Ура, у нас все получилось. </p>
<p>Демо: <a href="http://www.charnad.com/stuff/simplemodal/">посмотреть</a></p>
<p>А другие <a href="http://snowcore.net/category/jquery" title="Примеры jQuery скриптов">jQuery примеры</a> можете посмотреть у моего друга Snowcore.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.charnad.com/blog/prostoe-modalnoe-okoshko-na-jquery/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Пишем плагин для jQuery. Простая валидация форм.</title>
		<link>http://www.charnad.com/blog/jquery-simple-validate/</link>
		<comments>http://www.charnad.com/blog/jquery-simple-validate/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 21:12:04 +0000</pubDate>
		<dc:creator>CharnaD</dc:creator>
				<category><![CDATA[JS]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[плагин]]></category>

		<guid isPermaLink="false">http://www.charnad.com/blog/?p=41</guid>
		<description><![CDATA[Я сегодня написал свой первый плагин на jQuery, чем и хочу с вами поделиться. Новички, возможно, подчерпнут для себя что-то, знатоки поправят меня, где можно сделать лучше. Для тех, кто совсем не понимает в jQuery, но очень хочет - даю ссылку на материал, по которому сам разбирался в этой библиотеке. А так же ссылку на [...]]]></description>
			<content:encoded><![CDATA[<p>Я сегодня написал свой первый плагин на jQuery, чем и хочу с вами поделиться. Новички, возможно, подчерпнут для себя что-то, знатоки поправят меня, где можно сделать лучше.  Для тех, кто совсем не понимает в jQuery, но очень хочет - даю ссылку на <a href="http://www.rsdn.ru/article/inet/jQuery.xml">материал</a>, по которому сам разбирался в этой библиотеке. А так же ссылку на <a href="http://ru.wikipedia.org/wiki/Jquery">Википедию</a>, <a href="http://jquery.com/">официальный мануал (англ)</a> и <a href="http://anton.shevchuk.name/javascript/jquery-for-beginners">статьи</a>, которые мне помогли в изучении.</p>
<p><span id="more-41"></span></p>
<p>Начнем уже.</p>
<p>Для того, чтобы наш плагин мог быть вызван, как объект jQuery надо объявить его следующим образом:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">jQuery.<span style="color: #660066;">fn</span>.<span style="color: #660066;">validForm</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>userOptions<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">//пишем код тут</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>userOptions - в данном случае пользовательские опции. А настраивать пользователь сможет контейнер для вывода сообщения о том, что не все поля были заполнены правильно и стиль этого контейнера.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> options <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
    errorContainer<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;#errorList&quot;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>После чего переписываем эти опции пользовательскими.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$.<span style="color: #660066;">extend</span><span style="color: #009900;">&#40;</span>options<span style="color: #339933;">,</span> userOptions<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Добавляем так же стиль для оформления полей ввода, в которых есть ошибки (красная обводка в 2 пикселя и светло-красный фон). Добавляем методом append в тег &lt;head&gt;</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'head'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">append</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&lt;style&gt;.inputError{border: 2px solid #F00; background: #FAA;}&lt;/style&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<div id="attachment_48" class="wp-caption alignnone" style="width: 400px"><img class="size-medium wp-image-48" src="http://www.charnad.com/blog/wp-content/uploads/pictures/validform/fields.jpg" alt="" /><p class="wp-caption-text">Вот так это будет выглядеть</p></div>
<p>Теперь у нас заданы основные настройки, пора переходить к активным действиям. В jQuery программист оперирует не столько отдельными элементами, сколько их коллекциями, поэтому мы должны учитывать, что в наш плагин может быть передана не одна форма для валидации, а несколько. Для этого воспользуемся функцией each для перебора всех входных данных. Данные у нас помещаются в переменной $(this).</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> id <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;#&quot;</span> <span style="color: #339933;">+</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'id'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span>id <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot; input&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">length</span> <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Validate<span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Как видите, для каждого полученного объекта мы объявили переменную id, состоящую из '#' и атрибута 'id' объекта. Тем самым мы получили id, который для использования в других функциях jQuery. В третьей строчке мы берем объект с именем id и всех его потомков, являющимися input'ами, и если их не 0, то применяем функцию Validate, которую опишем позже, а иначе возвращаем false.  (Если вам что-то непонятно в этой записи - прочитайте самый первый материал, указанный в статье.)  Суть всей предыдущего куска кода - применить функцию Validatе ко всем переданным в плагин формам, у которых есть поля ввода.  Далее идет собственно функция, так сказать "сердце" этого плагина.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> Validate<span style="color: #009900;">&#40;</span>form<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">//дальше пишем код тут</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>form - имя формы, которую будем проверять.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>form <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot; input[@type=submit]&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Объявляем обработчик нажатия на кнопку submit.  Внутри нее сначала объявляем счетчик ошибок:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> errorAmount <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span></pre></div></div>

<p>А затем и коллекцию элементов, которые будем проверять.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> collection <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span>form <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot; input[@type=text]&quot;</span><span style="color: #009900;">&#41;</span>
    .<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span>form <span style="color: #339933;">+</span><span style="color: #3366CC;">&quot; input[@type=password]&quot;</span><span style="color: #009900;">&#41;</span>
    .<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span>form <span style="color: #339933;">+</span><span style="color: #3366CC;">&quot; input[@type=file]&quot;</span><span style="color: #009900;">&#41;</span>
    .<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span>form <span style="color: #339933;">+</span><span style="color: #3366CC;">&quot; textarea&quot;</span><span style="color: #009900;">&#41;</span>
    .<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span>form <span style="color: #339933;">+</span><span style="color: #3366CC;">&quot; select&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Функция add добавляет к уже найденным элементам еще множество. Таким образом, в переменной collection у нас собраны все поля ввода текста, пароля, селекты и текстарии.  Для каждого элемента коллекции сначала для простоты определяем элемент в переменную element, его длину length. Если длина у нас false (то есть равна 0) мы добавляем css-класс этому элементу (этот класс мы выше добавили в &lt;head&gt;), увеличиваем счетчик ошибок на 1. В случае же правильного заполнения поля - убираем красную обводку для поля ввода.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">collection.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> element <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> length <span style="color: #339933;">=</span> $.<span style="color: #660066;">trim</span><span style="color: #009900;">&#40;</span>element.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'value'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>length<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    element.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'inputError'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    errorAmount<span style="color: #339933;">++;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
    element.<span style="color: #660066;">removeClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'inputError'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Для большего комфорта мы добавим обработчики изменения в наши поля. Если пользователь нажимает клавишу (то есть начинает вводить текст) мы сразу убираем обводку, однако если он стер, все, что ввел - возвращаем ее назад.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">collection.<span style="color: #660066;">keypress</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">removeClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'inputError'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
collection.<span style="color: #660066;">change</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'value'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">length</span> <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'inputError'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">removeClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'inputError'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Теперь у нас есть количество ошибок в форме, а все поля с ошибками выделены красным. Осталось вывести сообщение пользователю о том, что он забыл ввести что-либо.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>errorAmount<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    $<span style="color: #009900;">&#40;</span>options.<span style="color: #660066;">errorContainer</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Заполните пожалуйста правильно выделенные поля'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    $<span style="color: #009900;">&#40;</span>options.<span style="color: #660066;">errorContainer</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
    $<span style="color: #009900;">&#40;</span>options.<span style="color: #660066;">errorContainer</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Заполняем указанный в опциях контейнер текстом и показываем. А если все заполнено правильно - скрываем.  Вот собственно и все. Просто и полезно.</p>
<p>Теперь о том, как это можно использовать.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">&lt;script src=&quot;jquery.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;jquery.validform.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
  $<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#myForm'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">validForm</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>errorContainer<span style="color: #339933;">:</span> <span style="color: #3366CC;">'#errors'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Не забудьте вставить в код контейнер с id="errors".</p>
<p>Готовый код можно скачать <a href="http://www.charnad.com/stuff/jquery.validform.js">тут</a>.<br />
А рабочий пример посмотреть <a href="http://www.charnad.com/stuff/validform">тут</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.charnad.com/blog/jquery-simple-validate/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

