css, html, php, javascript, jQuery, ajax … – решения, примеры, рецепты
3 Июл
Эта статья является чуть-чуть вольным переводом аналогичного раздела на сайте разработчиков библиотеки jQuery. Речь пойдет о казалось бы совсем простых вещах, но не всегда очевидных с первого взгляда, поэтому эта информация наверняка может кому-то пригодится.
Этот код выбирает элемент с id «myDivId». Поскольку id является уникальным, это выражение всегда выбирает один элемент. Или ничего не выбирает, если элемента с таким id не существует.
$('#myDivId');
Следующий код выбирает элемент(ы) с классом «myCssClass». Поскольку любое количество элементов может иметь этот класс, это выражение будет выбирать любое количество элементов.
$('.myCssClass');
Выбранный элемент может быть присвоен переменной javascript, например так:
var myDivElement = $('#myDivId');
Обычно выбранные элементы задействуются другими функциями jQuery:
// получаем значение элемента
var myValue = $('#myDivId').val();
// устанавливаем значение элемента
$('#myDivId').val("hello world");
Выбирая элементы по имени класса, лучше использовать составной селектор. Если отбор идет по id, то логично использовать именно id.
$('#myDivId'); // лучше
$('div#myDivId'); // хуже
$('span.myCssClass'); // лучше
$('.myCssClass'); // хуже
Вы можете использовать метод is() (см. jQuery API: Traversing – обход DOM) вместе с подходящим селектором.
if ( $('#myDiv').is('.pretty') )
$('#myDiv').show();
Заметьте, что этот метод позволяет Вам проверять также и другие вещи. Например Вы можете проверить, скрыт ли элемент (при использовании :hidden селектора).
if ( $('#myDiv').is(':hidden') )
$('#myDiv').show();
Иногда также бывает вопрос: имеет ли jQuery hasClass (см. jQuery API: Attributes – атрибуты) метод?
Заметьте, что hasClass был добавлен начиная с версии 1.2, чтобы обрабатывать наиболее распространенное использование метода is().
$("div").click(function(){
if ( $(this).hasClass("protected") )
$(this)
.animate({ left: -10 })
.animate({ left: 10 })
.animate({ left: -10 })
.animate({ left: 10 })
.animate({ left: 0 });
});
В этом коде добавляется некая анимация для элемента(ов) с классом protected. Обратите внимание, что имя класса тут записывается без точки.
Вы можете использовать свойство length набора jQuery, возвращенного селектором.
if ( $('#myDiv').length )
$('#myDiv').show();
Заметьте, что вовсе не всегда необходимо проверять, существует ли элемент. Следующий код показал бы элемент, если он существует, и не сделал бы ничего (и никакой ошибки бы не возникло), если это неверно.
$('#myDiv').show();
Вы можете проверить состояние, используя селекторы :visible или :hidden (см. jQuery API: Selectors – селекторы jQuery: фильтры контента, visibility-фильтры, фильтры атрибутов, child-фильтры).
var isVisible = $('#myDiv').is(':visible');
var isHidden = $('#myDiv').is(':hidden');
Если Вы хотите воздейстовать на элемент, основываясь на его видимости, просто включите «:visible» или «:hidden» в выражение селектора. Например:
$('#myDiv:visible').animate({left: '+=200px'}, 'slow');
Например, это может быть обычным для некоторых фреймворков, генерирующих уникальные id, которые имеют специальные символы в них (такие как ‘.’ или ‘[..]‘). Проблема состоит в том, что эти символы имеют специальное значение в CSS. Как поступать в таких случаях, смотрите на следующих примерах:
$("#some.id") // это не работает!
$("#some\\.id") // а это работает!
$("#some[id]") // это не работает!
$("#some\\[id\\]") // а это работает!
Вы можете разрешать/запрещать элемент, устанавливая атрибут ‘disabled’ в значение ‘disabled’ (чтобы запретить использование элемента) или присвоить тому же атрибуту пустое значение », или же просто удалить атрибут ‘disabled’ (чтобы разрешить использование элемента). Код может выглядеть примерно следующим образом:
// запрещаем использование элемента #x
$("#x").attr("disabled","disabled");
// разрешаем использование элемента #x
$("#x").attr("disabled","");
// разрешаем использование элемента #x
$("#x").removeAttr("disabled");
Вы можете попробовать следующий пример:
и посмотреть его исходный код:
<select id="x" style="width:200px;">
<option>Один</option>
<option>Два</option>
<option>Три</option>
</select>
<input type="button" value="Disable" onclick="$('#x').attr('disabled','disabled')"/>
<input type="button" value="Enable" onclick="$('#x').removeAttr('disabled')"/>
Вы можете отметить/снять отметку c элемента checkbox, устанавливая атрибуту ‘checked’ значение ‘checked’ (чтобы отметить элемент) или установить атрибуту ‘checked’ пустое значение «» (чтобы снять отметку). Пример кода приведен ниже:
// отмечаем checkbox с id="c"
$("#c").attr("checked", "checked");
// снимаем отметку checkbox'а с id="c"
$("#c").attr("checked","");
Вы можете попробовать следующий пример:
и посмотреть его исходный код:
<label><input type="checkbox" id="c"/>это подопытный checkbox</label>
<input type="button" value="Check" onclick='$("#c").attr("checked","checked")'/>
<input type="button" value="Uncheck" onclick='$("#c").attr("checked","")'/>
Элементы select обычно имеют два значения, к которым нужно обратиться. Это значение атрибута value соответствующего элемента option и его текстовое значение. Для примера возьмем следующий код:
<select id="myselect"> <option value="1">Mr</option> <option value="2">Mrs</option> <option value="3">Ms</option> <option value="4">Dr</option> <option value="5">Prof</option> </select>
Вот так можно получить значение атрибута value, выбранной опции:
$("select#myselect").val();
А вот так можно получить текст выбранной опции:
$("#myselect option:selected").text();
Вы можете попробовать следующий пример:
и посмотреть его исходный код:
<select id="myselect">
<option value="1">Mr</option>
<option value="2">Mrs</option>
<option value="3">Ms</option>
<option value="4">Dr</option>
<option value="5">Prof</option>
</select>
<input type="button" value="Get Value" onclick="alert($('#myselect').val())"/>
<input type="button" value="Get Text Value" onclick="alert($('#myselect option:selected').text())"/>
Отзывов (138) на «jQuery FAQ – часто задаваемые вопросы по jQuery.»
Лучше бы мне в школе ajax преподавали =). Спасибо за подборку простых действий, кстати ваш сайт взял за учебник, буду потихоньку изучать аякс. Кстати ткните носом меня в статьи где описывается работа пользовательской части и серверной без перезагрузки страницы. Вроде правильно сказал =)
Если Вас именно ajax интересует, то можете тут смотреть http://www.linkexchanger.su/category/ajax – в этих статьях описывается как библиотека jQuery может взаимодействовать с ajax. Подчеркиваю, рассматривается именно взаимодействие jQuery и Ajax, а не саму технология Ajax, в «чистом» виде.
Так же изучаю jQuery по вашим статьям.Огромное спасибо. Может быть Вы выпустите справочник по jQuery в формате html для скачивания.
Материал-то в принципе есть, так что вполне реально. Только время на все нужно, а его очень уж маловато…
Я новичек в Javascript’е, поэтому очень интересно.
П.С. При нажатии TAB’а из textarea фокус на кнопку «Добавить отзыв» не переходит
У меня вопрос такой…….
Скажем я хочу найти все элементы » в документе, и ко всем этим элементам применить какую то анимацию, но чтобы после начала первой анимации прошло несколько секунд и только тогда началась анимачия второго » – а, как сделать?
Извините, там где у меня стоят » внутри я написал ‘див’
Наверное такую задачу можно решить по разному… Вопрос ведь в чем, если разобраться? В том, чтобы как-то все-таки разделить div’ы в наборе, верно? Т.е. чтобы было понятно, что вот это первый, это второй и т.д…. Проще всего наверное было бы использовать анимацию в each(), но думаю, что и еще способы найдутся…
Так дело в том что если использовать each() то не возможно сделать так чтобы вторая анимация разигрывался после окончания первой, или чтобы вторая началась через несколько секунд…….
Реально задача наверное не обыграть анимацией все div’ы на странице… Тогда задавайте анимацию для каждого конкретного элемента, оформляйте их в функции. И по окончании очередной анимации вызывайте нужную функцию, которая проиграет следующую анимацию и т.д. Что-то вроде этого…
Gennady, если так делать, то в IE6 будет утечка памяти
Может быть… Только жертвовать всегда чем-то приходится, да и не думаю, что в реальности может встретиться задача с анимированием даже нескольких десятков элементов. Да и способы устранения утечки памяти, если покопаться можно найти…
Не зная задачи в деталях можно советовать только что-то общее… Может быть стоит задуматься как можно было бы использовать queue() для решения этой задачи.
Наверное правильней всего будет использовать очереди, постараюсь сделать таким образом…….. Спасибо за ответы
Хотел бы узнать как можно узнаip ip адрес посетителя сайта с помощью jquery или вообще с помощью javascript, если это вообще возможно?
Благодарю
А какая практическая польза от того, что в клиенте юзера будет определен его же IP? Проще, быстрее, надежнее, да и разумнее такие вещи делать в приложении, которое выполняется на сервере…
Возможно Вы правы, но если определять ip пользователя на его стороне то можно узнать настоящий ip? а не прокси анонимный или еще какойто ……
Никогда не озадачивался вопросом настолько, чтобы раздавать советы, но принципиальные решения по-моему существуют. Погуглите хорошенько, думаю информация в интернете есть…
Еще один вопросик касательно jquery
Если я с помощью библиотеки вставляю например в див форму для заполнения и отправки через аякс,
$(«#content_admin»).html(» тут сама форма в html формате»);
то кнопка button не реагирует на такой вызов $(«#otpravka»).click(function() и т.д.
Что можете сказать по этому поводу. Может есть какое-то решение.
Могу сказать, что скорее всего Вы ошибаетесь в последовательности действий при навешивании события на кнопку. Да и вообще, зачем идти таким извилистым путем? То, что Вы хотите реализовать делается примерно так:
1. форму выводите обычным HTML-кодом;
2. если Вам нужно, чтобы она была скрыта при загрузке страницы – просто определяете в CSS display:none;
3. чтобы показать форму теперь достаточно сделать только $(«$content_admin»).show();
Уверен, что в таком варианте и клик по кнопке будет прекрасно отрабатывать.
А вообще – старайтесь на этапе отладки пользоваться хотя бы alert’ом, чтобы видеть, что у Вас в приложении происходит. А еще лучше – юзайте FireBug.
Как бороться с неприязнью cp1251 в jquery?
Ну наверное здесь все-таки не стоит говорить только о jQuery. Попробуйте работать например с любым «чистым» Ajax-приложением и будет тоже самое….
Наверное уже стоит (хотя бы в новых проектах) использовать utf-8, избавляя и себя и в чем-то пользователей от проблем.
Понятно, что не всегда все можно переделать, но решение есть. Обычно проблемы возникают при сравнении строк, при подсчете количества символов и т.д. Решение – в использовании mb_convert_encoding и Multibyte String.
Буду признателен, если ответите на мой вопрос.
…контент…
#all растянут на всю высоту экрана при небольшом количестве контента, при большом количестве – подстраивается под него. Необходимо отметить, что ширина этого блока резиновая, т.е. при resize его высота может меняться в зависимости от контента.
Вопрос: как при помощи jQuery выщитать высоту у блока #all и подставить ее для блока #content. Причем пересчет должен происходить по событиям onload и resize
не прошел код (
див #content находится внутри дива #all, внутри дива #content какой то текст
В приведенном коде функцию myResize можно записать короче, но я писал подробно, чтобы было понятнее…
function myResize () {
var h = $("#all").height(); // получаем высоту #all
var w = $("#all").width(); // получаем ширину #all
$("#content").height(h); // ставим высоту #content
$("#content").width(w); // ставим ширину #content
}
$(window).load(function () {
myResize (); // по загрузке
});
$(window).resize(function(){
myResize (); // по изменению размеров
});
Вот примерно так. Ну и не мне Вам объяснять про реализацию блочной модели в различных браузерах. Просто учитывайте тот факт, что значения ширины и высоты в разных браузерах будут немного отличаться. Но и это не беда. Корректировку можно ввести довольно легко, используя jQuery.browser.
P.S. Смотрел Ваш сайт. Классно, профессионально. Понравился Ваш подход к делу. В общем рекомендую всем посмотреть как должна делаться верстка сайтов.
Спасибо!
2 Gennady:
Собственно к этому и сам пришел вот решение:
<?php
function callback($buff){
return iconv(«windows1251″,»utf-8″,$buff);
}
ob_start(«callback»);
register_shutdown_function(ob_end_flush);
И этот файл реквирим или инклудим в наши backend скрипты
Поясню для всех: это к разговору о том,
Имеем
$(‘.wp_dTreewp_dtree_Node a’).click(function()
Надо сделать так чтобы функция срабатывала только на ‘.wp_dTreewp_dtree_Node a’ , Чтобы если было допустим ‘.wp_dTreewp_dtree_Node a img’ то функция не срабатывала.
Можно проверять тег (по-моему $(this).tagName или что-то вроде того), если != ‘a’ return ;
Я не очень-то силен… может напишете пример
Или как указать скажем другую функцию
‘.wp_dTreewp_dtree_Node a img’
Как такое написать правильно у нас тут a и img он такое не поймет, т.е. чтоб в теге <a> был вложен тэг … и для этой фунции ничего не делать. Это решит данную проблему
У меня получилось
$(document).ready(function(){
$(‘#link, #link img’).click(function()
{
alert(this.tagName)
return false
})
})
Можно скачать полный пример http://clck.ru/mi
Проблема решена с помощью $(«a[id^='sc']«).click(function(){ … с http://clck.ru/mi я не так и не разобрался ((
Огромное спасибо за помощь!
С решением, которое предложил Денис Радченко тоже все просто:
$(‘a, a img’).click(function() {
if(this.tagName == ‘IMG’) {
alert(‘Клик на картинке – ничего не делаем!’);
} else {
alert(‘Клик на ссылке – делаем что-то!’);
}
return false;
});
В набор включаются и тэги А и тэги IMG – а далее элементарно, если имя тэга, по которому совершен клик IMG – ничего не делаем, иначе – что-то делаем…
Немоглибы вы подсказать как получить значение поля формы. Пробовал:
var text = $(«#form»+id).value;
не работает
Это естественно, поскольку value – это атрибут…
var text = $(‘#form input’).attr(‘value’);
здесь form – атрибут id тэга form.
Спасибо, нашёл 2 рабочих решения:
var text = $(«#com» + id).val();
var text = $(«#com» + id).attr(«value»);
Подскажите, пожалуйста, возможно ли при помощи jQuery реализовать переключение интерфейса с закладками как по ссылке http://www.skype.com/intl/en/share/ (News, SkypeMe!, Gear and gadgets, Business)
Если да, то как. Если можно, приведите пример.
Спасибо!
Легко. См. содержимое во вкладках, причем плагин не обязательно использовать, много лишних возможностей, проще сделать под себя, а плагин в качестве примера послужит. Только посмотрите свежую информацию на сайте jQuery – статья писалась довольно давно, наверняка есть изменения и в плагине.
ок, спасибо!
Подскажите пожалуйста как добавить атрибут selected на с заданным id?
Сорри, тут нельзя тэги:)
Вопрос таков:
Подскажите пожалуйста как добавить атрибут selected на одну из option с заданным value?
То есть как выбрать в комбобоксе option с заданным value? Спасибо.
Например вот так:
$(«select option[value='"+option+"']«).attr(«selected»,»selected»);
где option – это переменная, в которой содержится значение нужной опции.
Спасибо:)
У меня такой вопрос. Есть меню с определённой структурой. Мне нужно сказем вырезать из него первых 3 пункта и вставить в блок с id=’menuId’.
Я подумал так: выбираем нужные элементы, делаем им clone(), исходное меню скрываем. Теперь есть клонированный кусок меню и это html код с определённой вложенностью.
Как его вставить в элемент с id=’menuId’?
И вообще – правильный ли ход мыслей я использовал?
$(‘#menuId’).append(items);
где items – Ваши три пункта.
Что касается хода мыслей – реализации можно предлагать разные, главное, чтобы работало.
Давно пытаюсь создать индикатор загрузки страниц, но у меня никак не получается… Пробовал следующим образом:
function loading(){
$(‘body’).css({‘visibility’: ‘hidden’});
$(‘#loading’).css({‘opacity’: ‘1′});
};
$(function(){
$(‘body’).attr({‘onbeforeunload’: ‘javascript:loading();’});
$(‘body’).css({‘visibility’: ‘hidden’});
$(»).appendTo(‘body’);
$(‘#loading’).css({
‘background’: ‘transparent url(up/loading.gif) no-repeat 50% 50%’,
‘position’: ‘absolute’,
‘left’: ‘50%’,
‘width’: ‘32px’,
‘margin-left’: ‘-16px’,
‘top’: ‘50%’,
‘height’: ‘32px’,
‘margin-top’: ‘-16px’
});
$(‘#loading’).animate({‘opacity’: ‘0′}, 400, function(){
$(‘body’).css({‘visibility’: ‘visible’});
})
});
Так как jQuery выполняет код в тот момент, когда уже доступна объектная модель документа, то теряется вся задумка индикатора… Как обойти это? Знаю только что на основе события onbeforeunload… Но этого явно недостаточно… И еще нужно, чтобы все манипуляции с body происходили именно в скрипте…
Знаете, меня например сразу смутило вот что: Вы делаете невидимым элемент body, но в тоже время пытаетесь отобразить индикатор загрузки (элемент #loading), который добавляется как раз в body – Вы его просто не увидите, ведь скрыт его родительский элемент.
Мне кажется искать надо другую идею….
Странно… Элемент #loading я вижу, так как при обработке функции loading() я устанавливаю видимость именно этого участка кода… Пробовал вместо css-скрытия использовать функцию hide()… Вся беда в том, что мне не удается выполнить функцию до загрузки DOM… Может я просто сумбурно выражаюсь? Геннадий, если знаете, подскажите как это реализовать эту часть на чистом javascript’e… В смысле мне нужно: 1) присвоить аттрибут onbeforeunload к элементу body, 2) создать элемент #loading и добавить его в начало body, 3) присвоить необходимые css-свойства body и #loading…
Попробуйте готовый рецепт http://www.seo-webdesign.ru/content/view/6/56/
а детали реализации можно заточить и под использование jQuery.
Спасибо! Буду изучать!
Меня давно уже мучает один вопрос, как выбрать элементы в атрибуте name которых есть специфические символы. Сейчас поясню:
Есть форма, в ней элементы формы разные, каждый элемент имеет атрибут name примерно такого формата:
name=»q[str]»
нужно его найти, имея только str
Пробовал так
$(«[@name=\\[str\\]]») – но не находит он его. Может есть способ?
Думаю, чтобы решить вопрос, Вам надо просто чуть-чуть поближе познакомиться с этой http://www.linkexchanger.su/2008/52.html статьей по селекторам jQuery. У Вас же кроме [str] имеется еще и q, верно? А в статье Вы легко найдете ответ на вопрос.
простите у меня вот такая инструкция не хочет работать в ie6:
$(document).ready(function(){
$(‘a.sideBlockMenu’).click(function(){
alert(‘Ты кликнул по линку!’);
return false;
});
});
Opera и FF кушают этот код и все нормально, а вот ребенок Майкрософта капризничает – просто игрориует код. Такое чувтсво что для него этого javascript-а вообще не существует.
Помогите решить проблему. Спасибо.
Андрей, это должно работать – ошибок в коде я не вижу. Когда в FF и Opera все работает, а в IE – нет, то обычно это либо нет точки/запятой в конце или что-то с кавычками напутано.
Почемунельзя обратится к тегу IMG. делаю так :
$(document).ready(function(){
$(«p»).hover(
function () {
$(this).append($(«*******************************»));
},
function () {
$(this).find(«span:last»).remove();
}
);
});
—————————
но при наведении на картинки эффекта нет
ой тоесть так $(«img»).hover(
Эффекта нет !
кто знает подскажите как выбрать все элементы кроме некоторых, которые известны. Буду признателен.
:not(’span’) – например, выберет все элементы, кроме элементов span.
При изучении jquery ui, а именно droppable, у меня возник вопрос.
как получить текст из
текст
При переносе на droppable
Мне нужно узнать id продукта который добавили в корзину для того чтобы сделать запись в базу данных.
а мануалы и в правду очень хороши
Вы не читали эту статью? Там практически все это и описано. Разве что надо делать скидку на то, что статья была написана в конце января 2008г. и последней версией библиотеки на тот момент была 1.2.1. Т.е. изучить пример можно, но делать надо на новых версиях, как самой библиотеки, так и draggable&droppable.
спасибо огромное очень выручили напишите свой адрес я вам пива вышлю)
Господа, никак не могу ни найти не сообразить, можно ли с помощью jQuery обмануть оперу на предмет обработки события ‘onbeforeunload’ ?
Точнее скорректирую задачу. Есть локальный файл, в котором с помощью JS изменяются данные (берущиеся из самого файла, к примеру код этого скрипта), надо как-либо препятствовать нажатию «F5″, «Go Backward» , «Go forward» ибо изменения не сохранятся, а нежелательный события можно вызвать случайно комбинациями клавишь.
Работа с файлом происходит в браузерах опера и ИЕ (линух и винда, соответственно). Если для ИЕ я решил проблему (onbeforeunload), то для оперы никак
Есть соображения?
В jQuery есть метод unload(fn) – http://docs.jquery.com/Events/unload#fn
Работает во всех основных браузерах. Могу точно говорить, поскольку использовал его на практике.
Код не прошел:(
В общем использую библиотеку jquery, id для тегов и метод $(”#id”).hide(), который не работает в IE
Уважаемый Serg!
Вы вероятно все-таки взрослый человек, раз используете jQuery… Вот тут
http://docs.jquery.com/Effects/hide
http://www.linkexchanger.su/2008/61.html
есть примеры того, как работает этот метод. Пожалуйста, не сочтите за труд, откройте эти ссылки в браузере IE, чтобы убедиться, что метод hide() работает так, как собственно и должен работать.
Уважаемые! подскажите куда копать чтобы получить более красивое решение.
есть много форм (form1, form2 …)
одна функция todo()
и потом для каждой формы код
$(‘#form1′).submit(function(event){
event.preventDefault();
todo(this);
});
работает но не универсально
Здравствуйте. у меня вопрос. начал осваивать jQuery. Через пару дней экспериментов, вдруг появилась следующая ошибка (из консоли ошибок FireFox):
Ошибка: illegal character
Источник: file:///D:/MyWorks/Programming/jquery/js/jquery-1.2.6.js
Строка 1, символ 4
Исходный код:
昨湵瑣潩⡮笩⼊ਪ⨠樠畑牥⁹⸱⸲‶敎⁷慗敶䨠癡獡牣灩ੴ⨠ 潃祰楲桧⁴挨
исходный код, я, естественно, не трогал. Но на всякий случай ,заново скачал jQuery. Ошибка осталась. В чем может быть дело?
Алексей, дело не в самой библиотеке конечно же. Проверьте свой код, скорее всего где-то недопустимые символы.
Не знаю. Я уже тупо скопировал первый пример с http://www.jquery.com
// Your code goes here
$(document).ready(function() {
$(«a»).click(function() {
alert(«Hello world!»);
});
});
jQuery
все то же. Может, ткнете носом?:)
Тогда загадка…. Может в кэше что осталось? Не пробовали очистить? Мало ли что…
снес все. и кэш и свои исходники и библиотеку. поставил заново. вроде, на примерах с вышеуказанного сайта ошибок нет. посмотрим что будет дальше.
спасибо.
Подскажите пожалуйста, мне нужно определять загружены ли файлы javascript, которые подключаются на странице, и после того как они загрузились выполнять какой-то код. Никак не могу найти как проверить загружены ли файла или нет. Может быть вы подскажите решение этой проблемы?
Спасибо
Ну а для чего ready(fn) как не для этого (в том числе)?
У меня возникла проблема с кодировкой при отправке данных $.ajax на сервлет
Я указываю contentType:»application/x-www-form-urlencoded; charset=UTF-8″
А в сервлете получаю «ÐÑдеÑко» вот такой вот текст…
Сама страница в которой генерится jquery – jsp с кодировкой windows-1251
принимающий сервлет с кодировкой UTF-8
Подскажите как можно порешать такую проблему
может поможет сперва конвертнуть в ютф?
$search = iconv(«windows-1251″, «utf-8″, $search);
Юрий, то что Вы получаете «кракозябры» – понятно. Опция contentType у Вас некорректна. Здесь она не может принимать такое значение. Возможно значение: «application/x-www-form-urlencoded», но оно и так установлено по умолчанию.
Есть еще опция scriptCharset – она используется в случае различных кодировок клиента и сервера. Но она поможет Вам только в том случае, если опция dataType (она определяет тип данных, которые Вы ожидаете в ответе сервера) принимает значение ‘jsonp’ или ’script’ и тип запроса GET.
Если это не подходит, тогда должен помочь рецепт hetzer‘a.
Не нашел, может плохо искал… Но вопрос в следующем:
Пусть результат возвращается в виде готового куска html, в котором есть скрипты.
Как выполнить именно эти скрипты, после того, как этот кусок вставлен в нужное место (например в div)?
Давайте прямо кодом и покажу.
HTML-разметка:
<button>ajax!</button>
<div id=»someId»></div>
CSS:
div {
width:300px;
height:300px;
border:1px solid red;
}
span {
background-color:yellow;
}
JS-код:
$(document).ready(function(){
$(‘button’).click(function(){
$.ajax({
url: ‘_code.php’,
success: function(answ){
$(‘#someId’).html(answ);
}
});
});
});
и серверный сценарий на PHP:
<?php
if($_SERVER['HTTP_X_REQUESTED_WITH'] == ‘XMLHttpRequest’) {
print ‘<script type=»text/javascript»>
alert(«Работает!»);
</script>
<span>Это и правда работает!</span>’;
}
?>
Подскажите пожалуйста как осуществлять https запросы?
Так же как и http… Просто не очень понятно, что именно в этом смысле Вам интересно.
Допустим я сделаю
$.getJSON(«./back/test.php»,{data:1,key:»test»},myfunc)
не хочу прописывать жесткую ссылку
Полагаю метод $.ajax() позволит выставить соответствующие настройки.
Соответственно хочу использовать протокол https чтобы передавать шифрованный трафик.
Точно не скажу, но думаю, что запрос с http на https будет расценен как кроссдоменный. Т.е. «в лоб» это не сработает. Надо пробовать варианты:
- страница, отправляющая запрос, должна быть тоже загружена по https;
- попробовать использовать JSONP;
Подскажите, пожалуйста
есть блок, изначально он скрыт display:none
При клике по какому-то элементу он должен:
– если скрыт, то появляться
– если открыт, то прятаться
Пишу:
$(«#auth_link»).click
(
function()
{
($(‘#auth’).is(‘:none’)) ? $(‘#auth’).show() : $(‘#auth’).hide();
return false;
}
);
Открывать блок – открывает, а вот прятать не хочет.
Что не так?
$('selector').toggle( function(){ $('#someId').show('slow'); }, function(){ $('#someId').hide('slow'); } );Спасибо!!!
библиотека довольно большая, в разработке некоторых сайтов бывает критично.
если мне нужна всего одна функция show можно какнибудь простым способом получить более компактную версию?
jquery-1.3.2.min.js = 55.9 KB
jquery-1.2.6.pack.js = 30.3 KB
Ну или код на «чистом» JavaScript.
Об IP адресе пользователя.
Сорри, что это несколько оффтопик, но тут эта тема поднималась.
Получить IP пользователя используя js не проблема, вот только толку от этого мало. Вы получите IP его машины, который виден его маршрутизатору и только. Это его адрес в локальной сети. Юзерские машины, сидящие непосредственно в Интернет своей сетевой точкой уже давно стали редкостью. (Да и те что были, имели динамический IP).
Для того, что бы более-менее адекватно идентифицировать юзера применяют сочетание его внешнего IP, параметров полученых через js, по возможности cookie и проч. информацию. Однако всё это позволяет лишь строить предположения относительно юзера, не более того.
Как можно заменить OnMouseOver другой изображения, только ненадо использовать background
<img id=»someId» src=»img/m1.png» alt=»" />
$('#someId').mouseover(function(){ $(this).attr('src','img/m2.png'); });Спасибо за ваши помощь
Помогите, пожалуйста. Впоследнем примере (Как получать значения выбранной опции элемента select) в случае с
$(«select#myselect»).val(); – всё нормально, а
$(«#myselect option:selected»).text(); – не работает…
В сообщении об ошибке: «Объект не поддерживает это свойство или метод». В чём может быть причина? Заранее спасибо.
Не работать в таком виде может, если у Вас select имеет атрибут multiple=’multiple’. Тогда конечно – ведь Вы получаете в наборе объект, к которому метод text() неприменим. Решать надо так:
$('#myselect option:selected').each(function(){ alert($(this).text()); });в этом случае Вы получите столько alert’ов, сколько опций у Вас выбрано…
Всё верно. Благодарю за хорошее разъяснение, и особое спасибо за столь быстрый ответ!
Здравствуйте, Gennady.
Начал осваивать jQuery. Вижу – вещь мощная очень, и интересная.
Но вот столкнулся с проблемой:
почитал у вас документацию и для тренировочки написал следующее – имеется модальное окно (Подключал плагин SimpleModal), ака «окно обратной связи».
от кого
e-mail
текст
Идея такова – получаю данные из формы обратной связи и отправляю их средствами Аякса в php-скрипт:
$(document).ready(function(){
$(‘.formOpen’).click(function(e){
e.preventDefault();
$(‘#divForm’).modal({
onOpen: modalOpen,
onClose: modalClose
});
});
$(‘input#send’).click(function(e){
e.preventDefault();
$.ajax({
type: ‘POST’,
data: $(‘#formpost’).serialize(),
url: ‘events.php’,
complete: function(){
alert($(‘#formpost’).serialize()); //для проверки как работает serialize() =))))
$(‘input#close’).show();
}
});
});
});
а php-скрипт обрабатывает данные и посылает их на почту:
Так вот – отправлять письмо почему-то не получается =(
сначала думал – может напутал чего-нибудь. И попробовал на локальном сервере записать информацию в файл (строки под комментами). Записалось! =)))
А вот передаваться письмом не хочет =((((
php-скрипт:
$mail = «po4ta@mail.ru»;
if($_SERVER['HTTP_X_REQUESTED_WITH']==’XMLHttpRequest’)
{
if ($_POST)
{
$n = $_POST['usr'];
$email = $_POST['email'];
$mess = $_POST['message'];
//$f = fopen(«message.txt»,»a»);
$ff = $n.» \r\n».$email.» \r\n».$mess;
$ff = iconv(‘utf-8′,’windows-1251′,$ff);
@mail($mail,»тестовое письмо»,$ff);
//fwrite($f,$ff);
//fclose($f);
} else
{
echo False;
}
}
Не находите, что вопрос не совсем в тему?
У Вас данные серверному сценарию передаются? Сделайте их вывод через print и смотрите на стороне клиента, определив callback-функцию в опции success ajax-запроса. Т.е. обычный рецепт отладки – ставьте контрольные точки и смотрите, где появляется проблема…
как найти определенное слово в строке? где-то это у вас видел, никак найти не могу…
:contains(text) – смотрите тут:
http://www.linkexchanger.su/2008/52.html
спасибо большое))
Подскажите плиз!!!
Как получать значения выбранной опции элемента select multiple?
Так же как и в примере. Попробуйте добавить в select атрибут multiple=»multiple» и где-нибудь рядом кнопочку с id=»button», тогда вот такой код:
$("#button").click(function(){ alert($("#myselect").val()); });при клике на эту кнопку выведет в окно предупреждения значения выбранных опций через запятую.
Забавно сегодня наткнулся на лаг, поставил для интереса Safari 4
и почему то в нем
var w = $(«#all»).width(); запросы такого рода
для получения width and height не работают еcли width and height не заданы явно в тегах…
жесть!
вот думаю из за чего это? из за библиотеки? или из за браузера… Ведь по идеи на браузер не должна ложится ответсвенность вычислять width and height в Javascript…
так что скорее всего это лаг библиотеки jquery
ИЛИ ЭТО ТОЛЬКО У МЕНЯ ТАКОЙ ЛАГ?
Многогранный Вы наш…. Вы же собирались сегодня делать colorpicker?
О Safari – бета четверки появилась насколько помню в самом конце февраля, а полноценный релиз появился в начале июня. Для работы с JS был анонсирован новый движок Nitro JavaScript. При всем этом jQuery 1.3.2 появилась до того, т.е. 19 февраля.
Так что если уж так хочется потестировать и найти баги – берите на сайте разработчиков версию 1.3.3pre и в путь…
colorpicker пока подождет =)
я нашел хорошую замену и врулил немного как он работает да и этот что на сайте выложен….
http://www.colorpicker.com/
вот с этого сайта достаточно один скрипт взять и свой стиль настроить….
мошно было узнать что цвет в большой Квадрат выводится всегда один, т.е. не градиент, а градиент это лишь вид, из-за другой картинки которая лепится сверху…
помогите, пожалуйста, не могу разобраться…
вот у меня пример:
$(document).ready(function (){
$(«p:contains(‘слово’)»).css(«text-transform», «uppercase»);
});
как мне сделать, чтобы не весь параграф изменяло, а только это слово?
Подскажите, пжлст, как мне получить элемент «tr»
если у меня this – это элемент «button»
универсальным методом в следующих структурах:
1. <tr><td>1</td><td><button>MyElem</button></td>
2. <tr><td>1</td><td><button><span>MyElem</span></button></td>
3. <tr><td>1</td><td><div><button>MyElem</button></div></td>
То есть внутри элемента button могут быть inline-элементы и внутри элемента могут быть блочные элементы, а мне нужно получить первого родителя tr от button
Например в первом случае можно: $(this).parent().parent()
но хотелось бы чтобы на все приведенные примеры был один способ
Можно попробовать parents(expr), см. тут
http://docs.jquery.com/Traversing/parents#expr
To Stasovsky:
Вы ищете именно параграф, а чтобы найти слово нужно использовать либо поиск в строке, либо регулярные выражения. Это уже в зависимости от Вашей задачи.
А как добавить элементу определенный id?
Сначала его найти, а потом определить атрибут…
$(’selector’).attr(‘id’,’someId’);
ну у меня есть допустим ссылка с классом, допустим, myCssClass и мне надо добавить ей id например myId
и код будет выглядеть так:
$(‘.myCssClass’).attr(‘id’,'myId’);
?
To Gennady.
Спасибо, этот пример мне подойдет
Ни где не нашел))
есть набор обьектов
так вот, мне надо посчитать все спаны, и если их нет то добавить в див текст «их нет» ))
var n = $(’span’).length;
в n будет записано количество элементов span, дальше условие – если их 0, то пишите, что требуется и куда надо
Народ, подскажите плиз, уже часа 2 бьюсь над вопросом – как заставить jquery возвращать не по ссылке, а по значению, не могу найти ответ
я пытаюсь переделать скриптом href у ссылок на onclick, запоминаю в промежуточную переменную текущий адрес…
link = $(«#left a:first»);
tmp = link.attr(«href»);
но jquery возвращает не строку href,а ссылку на строку и получается у меня все onclick на последнюю страницу ссылаются… вот весь код:
$(document).ready(
function()
{
var linksSize = $(«#leftdiv a»).size();
var link = $(«#leftdiv a:first»);
for(var i=0;i<linksSize;i++)
{
tmp = link.attr(«href»);
link.click(function()
{
a_click(tmp)
}
);
link = link.next();
}
$(«#leftdiv a»).attr(‘href’, ‘javascript:{}’);
}
);
function a_click(addr)
{
$(«#right»).fadeOut(‘fast’);
$.ajax({
url: addr, // сюда приходит один и тот же адрес!
cache: false,
success: function(html){
$(«#right»).html(html).fadeIn(’slow’);
}
});
}
У Вас в link ВСЕГДА при инициализации оказывается значение ПЕРВОГО анкора в #leftdiv’е. Вы же сами :first указываете….
Конструкция $(”select#myselect”) избыточна. Хватит и $(”#myselect”), потому что идентификатор в пределе страницы должен быть уникальным (это если по-честному
)
Ну да, а кто-то спорит? В общем про это даже написано, если почитать текст следующий ниже подзаголовка «Как выбирать элементы, используя class или id?»…
да, не страшно на самом деле …
Я так понимаю, что Вы по поводу одного из последних примеров статьи?
Согласен, недосмотрел. Кстати, не знаете ли, как выставить комбобокс именно по значению текстового содержимого, а не по value? У меня, кроме такой идеи:
var option = «Текст комбобокса»;
$(«#MySelect»).find(«option»)
.attr(«selected»,»selected»);
ничего в голову не приходит. Кстати, так работает, но быть может есть альтернативы?
Нормально. Разве что можно укоротить:
$("#myselect option") .attr("selected","selected");Так тоже работает…
не всегда. Контрпример – Mozilla 3.5. Вариант, предложенный Вами был изначально. В Mozilla 3.1 прокатывал, в 3.5 перестал… Пришлось перейти на find
Отличная статья, автору огромное спасибо за просветление, вообще в интернете немного таких замечательных проектов как http://www.linkexchanger.su/.
Добрый день,
а какое событие необходимо использовать для того чтобы изменить class у поля ввода input при нажатии на checkbox или label чекбокса?
пробую :
$(document).ready(function(){
$(«#checkbox).click(function() { $(«id_input»).removeClass(«sb»);
$(«id_input»).addClass(«sb»);
});
$(«#checkbox_label).click(function() { $(«id_input»).removeClass(«sb»);
$(«id_input»).addClass(«sb»);
});
});
но не получается.
перепробывал и select и onmouseover ..
или как считывать :
если значение у чекбокса checked=»checked»,
то $(«id_input»).removeClass(«sb»);
$(«id_input»).addClass(«sb»);
подскажите пожалуйста.
поправка:
addClass(”другой”); конечно же.
от руки писал ошибься.
Попробуйте $(”#checkbox).change. Тогда за кликами по чекбоксу и лэйблу не нужно будет следить отдельно.
A проверить чекбокс можно так:
http://docs.jquery.com/Selectors/checked
спасибо большое – работает
захотелось все таки не по событию класс изменять у поля ввода для текста – а по значению checked
за ссылку огромное спасибо
сейчас вникну попробую.
сколько бы не мучался всё равно не могу отловить случай пустого input – $(«#tableFilter input»).val()
как можно проветить что в input что то введено.
if ($(«#tableFilter input»).val()==»") {
var data_text =»dept=»+$(«#column option:selected»).text()+»&fio=»+$(«#tableFilter input»).val();
} else var data_text =»dept=»+$(«#column option:selected»).text()+»&fio=nill»;
if($(«input»).val().length == 0)
Как можно сделать так чтобы элемент смещался при наведении при помощи .animate?
заранее спасибо
как я понял можно использовать как основу код
$(«div»).click(function(){
if ( $(this).hasClass(«protected») )
$(this)
.animate({ left: -10 })
.animate({ left: 10 })
.animate({ left: -10 })
.animate({ left: 10 })
.animate({ left: 0 });
});
но судя по всему тут обработчик событий click
можно ли как тосделать чтобы обработчик событий был именно onmouseover или что нибудь подобное?
Опять заранее спасибо))
Код за основу взять можно. А вместо click написать mouseover. А вообще про события например, можно почитать тут:
jQuery API: Events – события. Часть 1
jQuery API: Events – события. Часть 2
Да очень помогло! Спасибо огромное!)
Удачи вам и вашему проекту!
Всем спасибо!
Комментирование статьи завершено.