Форма выглядит так:
$sess = ($_SESSION["quick_manager"]['quick_manager']==1)?1: 0;
$checked = ($sess == 1)?'':'checked';
echo "
<form>
<fieldset>
<legend>Установить Quick editor</legend>
<input type='checkbox' value='" .$sess. "' " . $checked . " id='quickedit'>
</fieldset>
</form>
<span id='mess'></span>";
аякс-запрос:
$script = '<script type="text/javascript">
$(document).ready(function(){
var edit = $("#quickedit").val();
$("#quickedit").change(function(){
$.ajax({
type: "POST",
url: "' . $parser->makeUrl($parser->getPageId()) . '",
data: "action=addsess&edit="+edit,
success: function(html){
if(html==1){
$("#mess").text("' . $parser->gt('debugmode_off') . '").show();
$("#quickedit").attr("checked",false);
}else{
$("#mess").text("' . $parser->gt('debugmode_on') . '").show();
$("#quickedit").attr("checked", true);
}
}
});
});
});
</script>
';
И скрипт, принимающий данные:
$action = (isset($_POST['action'])) ? $_POST['action'] : '';
$edit = (isset($_POST['edit'])) ? $_POST['edit'] : '';
switch($action){
case 'addsess':
if(!isset($_SESSION["quick_manager"]['quick_manager']))
$_SESSION["quick_manager"]['quick_manager'] = 0;
if($edit==1){
$_SESSION["quick_manager"]['quick_manager'] = 0;
print 0;
} else{
$_SESSION["quick_manager"]['quick_manager'] = 1;
print 1;
}
break;
}
Когда первый раз отмечаю - все нормально, сессия пишется.
Когда второй раз - ничего не происходит, но когда обновляю страницу - видно, что значение изменилось. У меня что-то неправильно в jQuery.
Спустя 25 минут, 48 секунд (2.04.2011 - 14:56) alex12060 написал(а):
$script = '<script type="text/javascript">
function reload(loc) {
document.location.href="http://"+loc+"";
}
$(document).ready(function(){
var edit = $("#quickedit").val();
$("#quickedit").change(function(){
$.ajax({
type: "POST",
url: "' . $parser->makeUrl($parser->getPageId()) . '",
data: "action=addsess&edit="+edit,
success: function(html){
if(html==1){
$("#mess").text("' . $parser->gt('debugmode_off') . '").show();
$("#quickedit").removeAttr("checked");
reload("'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'].'");
}else{
$("#mess").text("' . $parser->gt('debugmode_on') . '").show();
$("#quickedit").attr("checked", "checked");
reload("'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'].'");
}
}
});
});
});
</script>
';
Спустя 9 секунд (2.04.2011 - 14:56) quickxyan написал(а):
если на странице есть сессия и потом она переписывается, то надо перегружать страницу
Спустя 31 минута, 9 секунд (2.04.2011 - 15:28) Trianon написал(а):
Цитата |
Когда второй раз - ничего не происходит |
А что должно происходить? Данные в сессии поменялись? Поменялись.
JS-код какой причудливый... с вкраплениями php. Это как?
Спустя 1 день, 2 часа, 15 минут, 34 секунды (3.04.2011 - 17:43) Лена написал(а):
alex12060
Спасибо.
Теперь то же самое нужно с div сделать. div расположен в правом верхнем углу, он красный. При клике на нем должно устанавливаться новое значение сессии, а сам div должен становиться синим.
У меня почти все получилось, единственное, что плохо - при клике на div сессия меняется, но сам div исчезает. А надо, чтобы он был виден на странице все время и сделать это средствами JQuery - в шаблон я это div поставить не могу.
Код у меня получился такой:
Посмотрите, пожалуйста.
Trianon
Код с вкраплениями php исходит из структуры движка.
Спасибо.
Теперь то же самое нужно с div сделать. div расположен в правом верхнем углу, он красный. При клике на нем должно устанавливаться новое значение сессии, а сам div должен становиться синим.
У меня почти все получилось, единственное, что плохо - при клике на div сессия меняется, но сам div исчезает. А надо, чтобы он был виден на странице все время и сделать это средствами JQuery - в шаблон я это div поставить не могу.
Код у меня получился такой:
<style type=\"text/css\">
.butt_checked{
background-color:blue;
}
</style>
$src_= "<script type='text/javascript'>\n";
$src_ .= "
function reload(loc) {
document.location.href='http://'+loc+'';
}
$(document).ready(function()
{
var edit_button_div = $('<div>Quick Editor</div>').appendTo('body');
edit_button_div.css({'background-color' : 'red','position':'absolute', 'top' : '30px', 'right' : '30px','padding' : '7px','font-weight' : 'bold'});
edit_button_div.attr('id','quickedit');
$('#quickedit').click(function(){
$.ajax({
type: 'POST',
url: '" . $this->makeUrl($this->getPageId()) . "',
data: 'action=addsess&state=" . $_SESSION["quick_manager"]['quick_manager'] . "',
success: function(html){
//alert(html);
if(html==1){
$('#quickedit').removeClass('butt_checked');
reload('".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']."');
}else{
$('#quickedit').addClass('butt_checked');
reload('".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]."');
}
}
});
});
});
";
$src_ .= '</script>';
Посмотрите, пожалуйста.
Trianon
Код с вкраплениями php исходит из структуры движка.
Спустя 8 минут, 8 секунд (3.04.2011 - 17:51) alex12060 написал(а):
При изменении сессии у тебя выполняется это:
Теперь он ничего не имеет, поэтому, вместо ремува, можешь похимичить с цветом, а точнее, с цсс.
$('#quickedit').removeClass('butt_checked');
Теперь он ничего не имеет, поэтому, вместо ремува, можешь похимичить с цветом, а точнее, с цсс.
Спустя 18 минут, 15 секунд (3.04.2011 - 18:10) Лена написал(а):
Это вообще убрала. Как выяснилось, проблема в другом. Делаю alert(html); - ответ сервера, у меня в html - 0 или 1 плюс весь html-код страницы, из-за этого условие не выполняется. Как убрать весь код, чтобы у меня в html приходило только 0 или 1, как и должно?
Делаю html.substring(0,1), все равно кнопка синей не становится.
alert(html);
if(html==1){
$('#quickedit').addClass('butt_checked');
reload('".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']."');
}else{
reload('".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]."');
}
Делаю html.substring(0,1), все равно кнопка синей не становится.
Спустя 3 минуты, 58 секунд (3.04.2011 - 18:14) alex12060 написал(а):
$action = (isset($_POST['action'])) ? $_POST['action'] : '';
$edit = (isset($_POST['edit'])) ? $_POST['edit'] : '';
switch($action){
case 'addsess':
if(!isset($_SESSION["quick_manager"]['quick_manager']))
$_SESSION["quick_manager"]['quick_manager'] = 0;
if($edit==1){
$_SESSION["quick_manager"]['quick_manager'] = 0;
print 0;
die();
} else{
$_SESSION["quick_manager"]['quick_manager'] = 1;
print 1;
die();
}
break;
}
Спустя 10 минут, 4 секунды (3.04.2011 - 18:24) Лена написал(а):
Теперь в html то, что надо. Но все равно делаю $('#quickedit').addClass('butt_checked'); - кнопка как была красной, так и осталась. Сам класс выше определяю.
Спустя 58 минут, 42 секунды (3.04.2011 - 19:22) alex12060 написал(а):
<input type='checkbox' value='" .$sess. "' " . $checked . " id='quickedit'>
edit_button_div.attr('id','quickedit');
Сравните их ID
Может в них дело?
Думаю, надо поменять названия либо у 1, либо у другого.