[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: php+jquery, отметить чекбокс
Лена
Необходимо, если кто-то отмечает чекбокс - установить определенное значение в сессию, если снимаем чекбокс - установить другое значение.
Форма выглядит так:

$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 поставить не могу.

Код у меня получился такой:

<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, как и должно?


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, либо у другого.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.