Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2008, 13:16   #11
komex
Пользователь
 
Регистрация: 16.12.2006
Сообщений: 82
По умолчанию

Цитата:
Сообщение от Timpi Посмотреть сообщение

komex, твой вариант обращается к элементам как к массивам? У меня как раз с этим и проблема. Мне не удаётся сопоставить элемент массива с элементом формы. Посмотрю можно ли использовать document.forms[] или document.all
Вообще таким образом должен обратиться к полю и изменить его значение. Правда я не проверял его и не знаю, будет ли он работать с такими именами. Если этот вариант не сработает, я немного подругому напишу, когда буду в инете с компа, а не с телефона!
komex вне форума Ответить с цитированием
Старый 06.07.2008, 14:39   #12
Timpi
Пользователь
 
Аватар для Timpi
 
Регистрация: 20.10.2007
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Johnatan Посмотреть сообщение
Как насчёт уберать квадратные скобки? А в массив передавать ВСЕ имена полей? Я же написал...
Убрать скобки. Хороший вариант!
Сразу не догадался. Сегодня у меня день для семьи, а не для кодинга.

Правда я всё же попробую поэксперементировать с document.forms[] или document.all
Только не представляю что от них ожидать...
Timpi вне форума Ответить с цитированием
Старый 06.07.2008, 19:47   #13
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Так как задачка довольно интересная, я решил-таки потратить своё время на её решение.
Всё делалось очень на скорую руку, лишь бы работало.

PHP код:
<?php
$arr 
= array('menu1' => 'Пункт1','menu2' => 'Пункт2','menu3' => 'Пункт3','menu4' => 'Пункт4','menu5' => 'Пункт5');
$arrjava 'var menu=new Array(';
$arrjava2 'var menu2=new Array(';
foreach (
$arr as $key=>$value) {
    
$arrjava .= '"'.$key.'",';
    
$arrjava2 .= '"'.$value.'",';
}
$arrjava substr_replace($arrjava,');', -11);
$arrjava2 substr_replace($arrjava2,');', -11);
?>
Код HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <title>Hello!</title>
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<script type='text/javascript'>
<?= $arrjava ?>

<?= $arrjava2 ?>

function move(obj,newplace) {
    if (newplace < obj) {
      var temp = menu[obj];
      var temp2 = menu2[obj];
      for (var i=obj;i>newplace;i--) {
        //menu[i] = menu[i-1];
        menu2[i] = menu2[i-1];
      }
      //menu[newplace] = temp;
      menu2[newplace] = temp2;
      redraw();
    } else {
      var temp = menu[obj];
      var temp2 = menu2[obj];
      for (var i=obj;i<newplace;i++) {
        //menu[i] = menu[i+1];
        menu2[i] = menu2[i+1];
      }
      //menu[newplace] = temp;
      menu2[newplace] = temp2;
      redraw();
    }

}

function redraw() {
    var m = document.getElementById('menu');
    var y = '<table cellspacing="0" cellpadding="0" border="1"><tr><td colspan="5" style="text-align:center">Меню</td></tr>';
    for (x in menu) {
        y += '<tr>'+
        '<td><div id="'+menu[x]+'">'+menu2[x]+'</div></td>'+
        '<td><a href="javascript:move('+x+',0)">В начало</a></td>'+
        '<td><a href="javascript:move('+x+','+(x*1-1)+')">Наверх</a></td>'+
        '<td><a href="javascript:move('+x+','+(x*1+1)+')">Вниз</a></td>'+
        '<td><a href="javascript:move('+x+','+(menu.length-1)+')">В конец</a></td>'+
        '</tr>';
    }
    y += '</table>';
    m.innerHTML = y;
    show();
}

function show() {
    var err = document.getElementById('err');
    var y = '';
    for (x in menu) {
      y += menu[x]+' - '+menu2[x]+'<br />';
    }
    err.innerHTML = y;
}

function send() {
    var err = document.getElementById('err');
    var q = document.getElementById('query');
    var query = '';
    for (x in menu) {
      query += menu[x]+'='+menu2[x]+'&';
    }
    q.value = query.substr(0,query.length-1);
    return true;
}

</script>
</head>
<body onLoad="redraw()">
<div id="menu"></div>
<form action="" method="post" onSubmit="send()">
<input type="hidden" name="query" id="query" />
<input type="submit" value="Сохранить" />
</form>
<div id="err">.</div>
<?
if (isset($_POST['query'])) {
  echo $_POST['query'];
}
?>
</body>

</html>
Всё это, конечно может работать и через AJAX. Попробуй раскомментировать четыре закомментированных строчки и посмотри что будет. Так что вариантов даже несколько.

А, ну и конечно, нужно проверять на первую и последнюю строчку (что первую, нельзя поднимать ещё выше, а последнюю опускать ниже) и т.д. Но главное сам факт. Работает.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 06.07.2008, 22:40   #14
Romanbl4
Форумчанин
 
Аватар для Romanbl4
 
Регистрация: 20.06.2007
Сообщений: 144
По умолчанию

Цитата:
Сообщение от Timpi Посмотреть сообщение
SkyM@nRomanbl4, я обдумывал этот вариант. А если я буду менять местами не самые верхние, а 2-ю и 3-ю строки местами, то мне надо написать функцию в 3 строки, но с другими цифрамиПодскажите.
Просто можно создать функцию, которая принимает в качестве параметра номер или id перемещаемого элемента. Что то типа:

PHP часть:
PHP код:
<?
.....
for (
$i=0$i items_count$i++)
{
?><div id="menu_item_up<?=$i?>" onclick="change_items_up(<?=$i?>)">Вверх</div>
<div id="menu_item<?=$i?>">Меню такое-то</div>
<?
.....
for (
$i=0$i items_count$i++)
{
<
input name="menu_item_order<?=$i?>" id="menu_item_order<?=$i?>" type="hidden" value="<?=$items_order[$i]?>" />   
<?
.....
?>
javascript часть:

Код:
function change_items_up(this_item_number)
{
....
tmp = getElementById("menu_item_order"+this_item_number).value;   
document.getElementById("menu_item_order"+this_item_number).value = document.getElementById("menu_item_order"+(this_item_number - 1)).value;   
document.getElementById("menu_item_order"+(this_item_number - 1)).value = tmp;
....
}
Количество записей в базе (пунктов меню) можно в javascript-функцию передать тем же php типа var items_count = <?=$items_count?>;

Последний раз редактировалось Romanbl4; 06.07.2008 в 22:44.
Romanbl4 вне форума Ответить с цитированием
Старый 07.07.2008, 11:02   #15
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

По теме - многабукаф, ниасилил.

Рассказали бы в двух словах, чего пытаетесь достичь с самого начала.
SkyM@n вне форума Ответить с цитированием
Старый 07.07.2008, 15:15   #16
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Моё решение автору не подошло?
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 08.07.2008, 09:27   #17
Timpi
Пользователь
 
Аватар для Timpi
 
Регистрация: 20.10.2007
Сообщений: 29
По умолчанию

Спасибо всем кто участвовал в обсуждении!

Пока остановился на варианте Romanbl4:
document.getElementById( ...... ).value
Достаточно хорошо понятен и легко встраивается в уже написанный мною код.

Johnatan, посмотрел, что ты предложил. До конца в твой код не вникал, но он мне кажется будет более громоздким, чем тот на котором я остановился. Особенно то место где формируется массив. Потом массив надо обрабатывать, хотя с getElementById я работаю с элементами почти как с массивами. Ещё попробую функцию getElementByName, может не надо будет в одном теге вводить id и name. Твой код обязательно разберу. Думаю, что полезное решение в нём найдётся
Timpi вне форума Ответить с цитированием
Старый 08.07.2008, 11:16   #18
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Цитата:
Сообщение от Timpi Посмотреть сообщение
Ещё попробую функцию getElementByName, может не надо будет в одном теге вводить id и name.
name юзать не советую - с ним без геммороя не обойтись. Надо юзать id - по нему можно "достучаться" до любого элемента.
SkyM@n вне форума Ответить с цитированием
Старый 08.07.2008, 11:43   #19
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

SkyM@n
Если человек считает, что
document.saveconfig.menu_item0.valu e = document.saveconfig.menu_item1.valu e;
это менее громоздко чем
menu2[i] = menu2[i-1];
то пускай сам попробует стучаться к элементам через getElementsByName. Может он пересмотрит свой взгляд на DOM и JavaScript.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 08.07.2008, 11:57   #20
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Цитата:
Сообщение от Johnatan Посмотреть сообщение
SkyM@n
Может он пересмотрит свой взгляд на DOM и JavaScript.
2Johnatan: Пожелаем ему в этом удачи.
2Автор: Когда все идут вверх по технологической лестнице, ты спускаешься вниз. И еще - проверь то, что ты выбрал на разных браузерах.
2Romanbl4: Пожалуйста, не сбивайте людей с толку. Давайте учить хорошего, а не плохого.
SkyM@n вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
взаимодействие с QIP Toxa Общие вопросы Delphi 5 20.06.2008 19:39
Что то не так с переменными.. adwaer Помощь студентам 1 19.06.2008 08:42
Работа с переменными в DLL Zeraim Общие вопросы Delphi 3 14.05.2008 23:10
Взаимодействие форм mauar Общие вопросы Delphi 7 05.05.2008 11:36
Взаимодействие с виндой и еще кое-что Manitu Помощь студентам 5 25.03.2008 09:28