Отладка сценариев это

InfoPath 2010 InfoPath 2013 редактор сценариев (Майкрософт) 2007 Еще...Меньше

InfoPath 2010 InfoPath 2013 редактор сценариев (Майкрософт) 2007 Еще…Меньше

Примечание: 
Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим
ссылку на оригинал (на английском языке)
.

Общее средство разработки сред является возможность отладки, или обнаружить и исправить ошибки в сценарий, который вы написали. Когда отладка сценариев, можно либо отладка когда возникает ошибка сценария или установить точку останова, добавив инструкцию отладки сценария. Инструкция отладки сообщает отладки время для приостановки выполнения и дают возможность пройти сценарий и проверить его поведение. В этой статье объясняется, как добавить инструкцию отладки сценария.

  1. Откройте шаблон формы, содержащей сценарий в Microsoft Office InfoPath.

  2. В меню Сервис выберите программирования и нажмите кнопку Microsoft Script Editor или нажмите клавиши ALT + SHIFT + F11, чтобы открыть Microsoft Script Editor (MSE).

  3. В сценарии поместите курсор, которую вы хотите добавить инструкцию отладки и выполните одно из указанных ниже действий.

    • Чтобы добавить инструкцию отладки языка сценариев Microsoft JScript, введите в инструкцию debugger; .

  • Чтобы добавить инструкцию отладки языка сценариев Microsoft Visual Basic Scripting Edition (VBScript), введите в инструкцию Stop .

  1. В следующем примере используется оператор отладки обработчика событий OnLoad с использованием синтаксиса JScript:

    function XDocument::OnLoad(eventObj)
    {
    debugger;
    }

  2. Нажмите кнопку Сохранить в MSE или нажмите клавиши CTRL + S.

  3. Перейдите в InfoPath.

  4. На панели инструментов Стандартная нажмите кнопку Просмотр, или нажмите клавиши CTRL + SHIFT + B.

  5. В диалоговом окне JIT-отладка щелкните Новый экземпляр из Microsoft Script Editor и нажмите кнопку Да.

  6. В диалоговом окне Шаг в удаленный вызов процедур нажмите кнопку индекс и нажмите кнопку ОК. MSE открывается в режиме отладки и желтая стрелка показывает, где выполнение было приостановлено.

    Совет: MSE в режиме отладки можно использовать все возможности отладки, которые она предоставляет. Включает в себя параметр останова, пошаговая инструкциям программы и просматривайте окна отладки, например окна контрольного значения, Интерпретация и Стека вызовов.

  7. Если вы хотите прекратить отладка сценария, нажмите кнопку Остановить отладки в меню Отладка или клавиши SHIFT + F5 в MSE.

Нужна дополнительная помощь?

Справка по системе
Платформа ELMA BPM

×


Поиск

Поиск





Поиск




  •  Предыдущая
  • Следующая 

  (c) Company name, 2016Copyright © 2006–2021 ELMA

Отладка сценариев

Отладка – этап разработки сценария, на котором происходит обнаружение, локализация и устранение ошибок. Ошибки сценария можно разделить на синтаксические и семантические. К синтаксическим ошибкам сценариев относятся:

  • неверное написание названия функции или переменной при её вызове;

  • неверное количество аргументов;

  • неверный тип переданных аргументов;

  • неверный тип возвращаемого значения.

Наличие таких ошибок автоматически проверяется перед публикацией процесса или модуля сценариев. При наличии синтаксических ошибок процесс публикации прерывается. Таким образом, система не позволяет опубликовать версию процесса, сценарии которого содержат синтаксические ошибки.

К семантическим ошибкам относятся ошибки, из-за которых результат работы сценария не совпадет с ожидаемым. Для поиска семантических ошибок используется пошаговая отладка работы сценария.

Чтобы понять, где возникла такая ошибка, необходимо:

  • знать текущие значения переменных;

  • выяснить, по какому пути выполняется сценарий.

Для опубликованной, завершающихся и устаревших версий процесса отладка выполняется на вкладке Сценарии Дизайнера ELMA, где можно осуществить пошаговую отладку работы сценария с просмотром текущих значений переменных.

Внимание!

Пошаговую отладку сценариев необходимо выполнять на тестовом сервере, так как во время пошаговой отладки сервер останавливает свою работу. В ходе отладки сервер выполняет шаги сценария, приостанавливая работу до получения команды отладчика. В случае запуска отладки на рабочем сервере, пользователи системы ELMA не смогут взаимодействовать с системой до завершения отладки сценария. Кроме того, в ходе отладки вносятся изменения в базу данных, наличие которых на рабочем сервере нежелательно.

Для переноса отлаживаемого процесса с рабочего сервера на тестовый и обратно необходимо воспользоваться функцией экспорта и импорта конфигураций.

Пошаговая отладка работы сценариев осуществляется в средах разработки SharpDevelop или Microsoft Visual Studio. Следует отметить, что возможность отладки с помощью Visual Studio доступна только при наличии установленной среды разработки Microsoft Visual Studio редакции Community/Enterprise версий 2010-2015.

Для открытия сценария в режиме отладки необходимо нажать на кнопку верхнего меню Отладка или Отладка в VisualStudio.

Будет открыто окно Подключение к процессу для отладки в котором необходимо из предложенного списка необходимо выбрать веб-сервер, на котором размещена система ELMA. (рис. 1).

W3wp.exe – наименование процесса для веб-сервера Internet Information Services (IIS). Данный сервер является стандартным веб-сервером операционных систем семейства Microsoft Windows Server.

Выберите процесс веб-сервера, используемого для размещения сервера ELMA и нажмите ОК.

Рис. 1. Диалоговое окно выбора процесса операционной системы

После подключения к веб-серверу модуль сценариев будет открыт для отладки в выбранной среде разработки. В Дизайнере ELMA данный модуль сценариев будет недоступен для редактирования.

См. также:

����� 29. ������� ���������

��������� �������� Bash �� ����� ������ ���������, � �� �����
���� ����� ���� ���������� ������ ��� �����������. [1] �������������� ������ ���
�������� ����� �������� ��������� �� �������, ������� �������
����������� ����� �� �������� ��� �������.

������ 29-1. ��������, ����������
������

#!/bin/bash
# ex74.sh

# ���� �������� �������� ������.

a=37

if [$a -gt 27 ]
then
  echo $a
fi  

exit 0

� ���������� ���������� ����� �������� �� �������� �����
���������:

./ex74.sh: [37: command not found

��� � ���� �������� ����� ���� ����������� (���������: �����
��������� ����� if)?

������ 29-2. ��������� �������� �����

#!/bin/bash
# missing-keyword.sh:
# ����� ��������� �� ������ ����� ��������, ��� ������� ��������� ���� ��������?

for a in 1 2 3
do
  echo "$a"
# done     # ����������� �������� ����� 'done' ����������������.

exit 0

�� ������ �������� ���������:

missing-keyword.sh: line 11: syntax error: unexpected end of file
       

�������� ��������, ��������� �� ������ ����� ��������� ����� ��
��� ������, � ������� �������� ������, � ���, � ������� Bash
����� ��������� ������� ��������� ��������.

��������� �� ������� ����� ������ �� ��������� ������ ������,
��� ���������� ������� ��� ������ ���������.

� ��� ������, ���� �������� ��������, �� �� ��� ��� ���������?
��� ������ ������ ���������������� ���������� ������.

������ 29-3. test24

#!/bin/bash

#  ���������, ��� ���� �������� ����� ������� � ������� ��������
#+ ��� �����, ����� ������� �������� �������.
#  �� �� �� ��������.  ������?


badname=`ls | grep ' '`

# echo "$badname"

rm "$badname"

exit 0

���������� ����� ������, �������������� ������ echo
«$badname»
. ���������� echo ����� �������
��� ������� ���������, ��� ��������� ������ — ������������� ��
�� ��������� ��, ��� ������� ��������.

� ������ ���������� ������, ������� rm «$badname»
�� ���� ��������� ���������� ������, ��� ���������� $badname ����� � �������. � ����������,
rm �������� ������������ �������� (�.�.
������� ����� �������, ��� �������� ��� ������ �����). ��������
��� �������� ����� ���� ������ �� ���� �������� ������� ������
$badname � ��������� ���������� $IFS ���, ����� ��� ��������� ������ ������
�������� ������, IFS=$’n’.
������, ���������� ����� ������� ������ ��������� ��� ������.

# ���������� ������ �������� ������, � ���� ������ ���������� �������.
rm * *
rm *" "*
rm *' '*
# ������� S.C.

� ����� ������, ���������� ����� ������� ����� ��������,
�������

  1. «������» ����������� � «�������������� �������«
    ���

  2. �����������, �� �������� �� ��� ��� ��������� (���������� ������).

  3. �����������, ������ ��, ��� ���������, �� ����� ��������
    ������� (���������� �����).

�����������, ������� ����� ������ ��� ������� ������������
���������

  1. ������� echo, � ����������� ������ ��������, �������
    ��������� ��������� ���������� � ���������� ���
    ����������.

  2. �������-������ tee, ������� ������� ���������
    �������� � ������ ������ � ����������� ������.

  3. ����� -n -v -x

    sh -n scriptname
    �������� ������� �������������� ������, �� �������� ���
    ��������. ���� �� ������� ����� ��������, ������� � ��������
    ������� set -n ��� set -o noexec.
    �������� ��������, ��������� �� �������������� ������ ��
    ����� ���� �������� ����� ��������.

    sh -v scriptname
    ������� ������ ������� ������, ��� ��� ����� ���������. ����
    �� ������� ����� ��������, ������� � �������� ������� set -v ��� set -o verbose.

    ����� -n � -v ����� ������������� ���������: sh -nv
    scriptname
    .

    sh -x scriptname
    �������, � ������� �����, ��������� ���������� ������
    �������. ���� �� ������� ����� ��������, ������� � ��������
    ������� set -x ��� set -o xtrace.

    ������� � �������� set -u ��� set -o nounset, ��
    ������ �������� ��������� �� ������ unbound variable ������ ���, �����
    ����� ������������� ������� ��������� � �������������
    ����������.

  4. ������� «assert», ��������������� ���
    �������� ���������� ��� �������, � ����������� ������
    ��������. (��� ���� ������������ �� ����� ����������������
    C.)

    ������ 29-4. �������� ������� � ������� �������
    «assert»

    #!/bin/bash
    # assert.sh
    
    assert ()                 #  ���� ������� �����,
    {                         #+ ����� �� �������� � ���������� �� ������.
      E_PARAM_ERR=98
      E_ASSERT_FAILED=99
    
    
      if [ -z "$2" ]          # ������������� ���������� ������� ����������.
      then
        return $E_PARAM_ERR
      fi
    
      lineno=$2
    
      if [ ! $1 ]
      then
        echo "����������� �����:  "$1""
        echo "����: "$0", ������: $lineno"
        exit $E_ASSERT_FAILED
      # else
      #   return
      #   � ���������� ���������� ��������.
      fi
    }
    
    
    a=5
    b=4
    condition="$a -lt $b"     # ��������� �� ������ � ���������� ��������.
                              #  ���������� �������� ������� "condition"
                              #+ �� ��� ������ ������ �
                              #+ ���������� -- ��� ���������.
    
    assert "$condition" $LINENO
    # �������� ��������� ������ ������ � ��� ������, ���� ����������� �������.
    
    
    # ������ �������.
    # ...
    echo "��� ������ �������� �� ������ ������ ���� ����������� �������."
    # ...
    # ������ �������.
    # ...
    
    exit 0
    

  5. ������� �� ����� � ���� �������� ����� ���� �����������
    (���������: ����� ��������� �������.

    ������� exit, � ��������, ��������� ������
    0, �� �������� ������� ���������
    ������, �.�. — ��� ��������. [2] ����� ������ �������� ��
    ������ �� �������� ������ «����������» ����������.

��������� ������� �� �������

trap

���������� �������� ��� ��������� �������; ��� ��
������� ��� �������.

Note

������ (signal) — ��� ������
���������, ���������� �������� ���� �����, ����
������ ���������, ����� �������� ������� ���������
����� ���� �������� (������ — ��������� ������).
��������, ������� �� ControlC, �������� ��������
������� SIGINT, ������������� ���������.

trap '' 2
# ������������ ���������� 2 (Control-C), �������� �� ������� �� �������.

trap 'echo "Control-C disabled."' 2
# ��������� ��� ������� �� Control-C.

������ 29-5. ������� �� ������

#!/bin/bash

trap 'echo ������ ���������� --- a = $a  b = $b' EXIT
# EXIT -- ��� �������� �������, ������������� ��� ������ �� ��������.

a=39

b=36

exit 0
# �������������, ��� ���� ���������������� ������� 'exit',
# �� ��� ����� �� �������� �� ������ ��������,
# ��������� "�����" �� �������� ���������� � ����� ������.

������ 29-6. �������� ���������� ����� ��� �������
�� Control-C

#!/bin/bash
# logon.sh: ��������, ��������� "�� ������ ����", ������������ ���� � ����� on-line.


TRUE=1
LOGFILE=/var/log/messages
# �������� ��������: $LOGFILE ������ ���� �������� �� ������ (chmod 644 /var/log/messages).
TEMPFILE=temp.$$
# "����������" ��� ��� ���������� �����, ��� ���������� � ����� -- ��� pid ��������-��������.
KEYWORD=address
# ��� �����, � ���� /var/log/messages,
# �����������  ������ "remote IP address xxx.xxx.xxx.xxx"
ONLINE=22
USER_INTERRUPT=13
CHECK_LINES=100
# ���������� ����������� �����.

trap 'rm -f $TEMPFILE; exit $USER_INTERRUPT' TERM INT
# ������� ��������� ����, ����� �������� ��������� ������ �� control-c.

echo

while [ $TRUE ]  #����������� ����.
do
  tail -$CHECK_LINES $LOGFILE> $TEMPFILE
  # ��������� 100 ����� �� ���������� ������� ���������� �� ��������� ����.
  # ���������� ����������, �.�. �������� ������ ���� ���������� ����� ��������� ��� �����.
  search=`grep $KEYWORD $TEMPFILE`
  # ��������� ������� ����� "address",
  # ����������������� �� �������� �����.

  if [ ! -z "$search" ] # ������� ����������, �.�. ���������� ����� ��������� �������.
  then
     echo "On-line"
     rm -f $TEMPFILE    # ������� ��������� ����.
     exit $ONLINE
  else
     echo -n "."        # ���� -n ��������� ����� ������� �������� ������,
                        # ��� �� �������� ����������� ������ �����.
  fi

  sleep 1
done


# �������� ��������: ���� �������� ���������� ���������� KEYWORD
# �� "Exit", �� �������� ����� �������������� ��� ��������
# ������������ ������ (logoff).

exit 0

# Nick Drage ��������� �������������� �����:

while true
  do ifconfig ppp0 | grep UP 1> /dev/null && echo "���������� �����������" && exit 0
  echo -n "."   # ������ ������������������ ����� (.....), ���� ���������� �� ����� �����������.
  sleep 2
done

# ��������: ������� Control-C ����� ��������� �������������, ����� ��������� ���� �������.
#          (����� ���������� ���������� �� �����.)
# ����������: ��������� ���� ����������.



# Stephane Chazelas ��������� ��� ���� ������������:

CHECK_INTERVAL=1

while ! tail -1 "$LOGFILE" | grep -q "$KEYWORD"
do echo -n .
   sleep $CHECK_INTERVAL
done
echo "On-line"

# ����������: ������� ������� � ������ �������
#           ������� �� ���� ��������.

Note

�������� DEBUG, ������� trap, ���������� ��������
��������� ��������� �������� ����� ���������� ������
�������. ��� ����� ������������ ��� �����������
����������.

������ 29-7. �����������
����������

#!/bin/bash

trap 'echo "VARIABLE-TRACE> $LINENO: $variable = "$variable""' DEBUG
# �������� �������� ���������� ����� ���������� ������ �������.

variable=29

echo "���������� "$variable" ���������������� ������ $variable."

let "variable *= 3"
echo "�������� ���������� "$variable" ��������� � 3 ����."

# ����������� "trap 'commands' DEBUG" ����� ��������� ����� ��������
# ��� ������� ������� � ������� ��������,
# ����� ���������� ��������� ���������� "echo $variable"
# ����� ����������� ���������� �������� �������.

# ������� Stephane Chazelas.

exit 0

Note

����������� trap »
SIGNAL
(��� ��������� �������) — ���������
SIGNAL ��� ���������� ����� ��������. ����������� trap SIGNAL
��������������� �������� ������� SIGNAL. ��� �����������
����� �������������� ��� ������ ����������� ��������
�������� �� �������������� ����������.

       trap '' 2  # ������ 2 (Control-C) -- ��������.
        command
        command
        command
        trap 2     # ���������� ������� �� Control-C
       

Независимо от уровня подготовки разработчика при создании программ в них встречаются ошибки, мешающие правильной работе серверных сценариев. Поэтому отладка (процесс поиска и устранения ошибок сценариев) является обязательным и важным этапом разработки надежных приложений ASP, особенно если предполагается дальнейшее развитие приложения.

Средство отладки сценариев Microsoft Script Debugger

Средство отладки сценариев Microsoft® Script Debugger является мощным средством отладки, служащим для быстрого поиска ошибок и интерактивной проверки серверных сценариев. Отладчик сценариев, также работающий с обозревателем Internet Explorer версии 3.0 или более поздней, позволяет:

  • запускать серверные сценарии в построчном режиме выполнения;
  • открывать окно команд для отслеживания значений переменных, свойств и элементов массивов в ходе выполнения серверных сценариев;
  • приостанавливать выполнение серверных сценариев (используя отладчик или команду сценария) на определенной строке сценария;
  • трассировать процедуры при выполнении серверного сценария.

Примечание.  В отладчике можно просматривать сценарии и находить ошибки, но нельзя редактировать сценарии. Для исправления ошибок необходимо устранить их в редакторе сценариев, сохранить внесенные изменения и снова запустить сценарий.

Включение отладки

Для возможности отладки серверных сценариев сначала необходимо настроить веб-сервер для поддержки отладки сценариев ASP. Инструкции и сведения содержатся в разделе Включение отладки ASP.

После включения отладки веб-сценариев отладку можно выполнять одним из следующих методов:

  • Вручную открыть отладчик сценариев для отладки серверных сценариев ASP.
  • Запрашивать файл .asp, используя обозреватель Internet Explorer. Если файл содержит ошибку или специальную инструкцию, прерывающую выполнение, отладчик сценариев автоматически запустит сценарий, выведет его текст и укажет на источник ошибки.

Ошибки сценариев

При отладке серверных сценариев можно встретить ошибки нескольких типов. Некоторые из этих ошибок могут вызвать неправильное выполнение сценариев, остановку выполнения программы или возврат неверных результатов.

Синтаксические ошибки

Синтаксические ошибки обычно являются результатом использования неправильного синтаксиса инструкций сценариев. Например, ошибка возникает, если указано неправильное имя команды или задано неверное число аргументов. Синтаксические ошибки могут быть причиной неработоспособности сценария.

Ошибки времени выполнения

Ошибки времени выполнения возникают после того, как началось выполнение сценария и встретилась инструкция, пытающаяся выполнить невозможные действия. Например, следующий сценарий содержит функцию, выполняющую деление переменной на ноль (недопустимую математическую операцию) и генерирующую ошибку времени выполнения:

<SCRIPT LANGUAGE=VBScript RUNAT=SERVER>
  Result = Findanswer(15)
  Document.Write ("Ответ: " &Result)

  Function Findanswer(x)
  'Эта инструкция генерирует ошибку времени выполнения.
   Findanswer = x/0
  End Function
</SCRIPT>

Ошибки времени выполнения необходимо исправить, чтобы выполнение сценариев не прерывалось.

Логические ошибки

Логические ошибки обнаружить гораздо сложнее. Сценарий, содержащий логические ошибки, которые обычно бывают вызваны ошибками в тексте программы или упущениями в логике программы, выполняется нормально, но возвращает неверные результаты. Например, серверный сценарий, предназначенный для сортировки списка значений, может выполнять сортировку в неверном порядке, если в строке сравнения значений использован знак > (больше) вместо знака < (меньше).

Приемы отладки

Существуют несколько разных приемов поиска ошибок и проверки приложений.

Своевременная (JIT) отладка

Когда работа серверного сценария прерывается из-за ошибки времени выполнения, отладчик сценариев автоматически запускается, отображает файл .asp с указанием строки, в которой произошла ошибка, и выдает сообщение об ошибке. При таком типе отладки, называемом своевременной (JIT) отладкой, выполнение программы приостанавливается. Перед тем, как возобновление выполнения сценария станет возможным, необходимо исправить ошибки в редакторе сценариев и сохранить внесенные изменения.

Отладка с точками останова

Если возникает ошибка, источник которой не удается обнаружить, бывает полезно воспользоваться точкой останова. Точка останова приостанавливает выполнение сценария на указанной строке. Можно установить одну или несколько разных точек останова перед строкой, в которой происходит ошибка, а затем воспользоваться отладчиком для просмотра значений переменных или свойств, устанавливаемых при выполнении сценария. После исправления ошибки точки останова следует удалить, чтобы выполнение сценария происходило без вмешательства пользователя.

Чтобы установить точку останова, откройте сценарий в редакторе, выделите строку сценария, на которой требуется прервать выполнение, и выберите в меню Debug команду Toggle Breakpoint. Затем повторно запросите сценарий из веб-обозревателя. После выполнения строк сценария до точки останова будет запущен отладчик сценариев, отображающий сценарий и указывающий на строку, в которой установлена точка останова.

Останов на следующей инструкции

В некоторых случаях может потребоваться включение режима отладчика сценариев Break at Next Statement, если следующая выполняемая инструкция находится не в данном файле .asp. Например, если установить режим Break at Next Statement в файле .asp, относящемся к приложению Sales, отладчик будет запускаться при запуске любого файла сценария в приложении Sales или в любом приложении, для которого включена отладка. Поэтому, если включен режим Break at Next Statement, следует знать, что перед выполнением любой следующей инструкции сценария будет запущен отладчик.

Отладка сценариев VBScript с использованием инструкции Stop

В серверные сценарии, написанные на языке VBScript, также можно добавлять точки останова, вставляя инструкцию Stop перед сомнительным фрагментом серверного сценария. Например, следующий серверный сценарий содержит инструкцию Stop, приостанавливающую выполнение сценария перед вызовом специальной функции:

<%
  intDay = Day(Now())
  lngAccount = Request.Form("AccountNumber")
  dtmExpires = Request.Form("ExpirationDate")

  strCustomerID  =  "RETAIL" & intDay & lngAccount & dtmExpires

  'Точка останова.
  Stop

  'Вызов компонента регистрации.
  RegisterUser(strCustomerID)
%>

При запросе данного сценария отладчик запускается и автоматически отображает файл .asp с указанием расположения инструкции Stop. В этой точке можно просмотреть значения, назначенные переменным, перед тем, как передать их указанному компоненту.

Важно!   Не забудьте удалить инструкции Stop из готовых файлов .asp.

Отладка сценариев JScript с использованием инструкции Debugger

Чтобы добавить точки останова в серверные сценарии, написанные на языке JScript, вставьте инструкцию debugger перед сомнительной строкой или сценарием. Например, следующий сценарий включает инструкцию debugger, прерывающую выполнение и автоматически запускающую отладчик сценариев при каждом присвоении нового значения.

<%@ LANGUAGE=JScript %>
<%
  for (var count = 1; count <= 10; count++)
  {
    var eventest = count%2
    //Установка точки останова для того, чтобы пользователь мог отслеживать выполнение сценария.
    debugger
    if (eventest == 0)
          Response.Write("Четное значение: " + count + "<br>")
   }
%>

Не забудьте удалить инструкцию debugger из готовых файлов .asp.

Примечание.  Не путайте инструкцию debugger с инструкцией JScript break. Инструкция break завершает выполнение текущего цикла, не активизирует отладчик Microsoft Script Debugger и не приостанавливает выполнение.

Советы по отладке сценариев

Помимо отладчика сценариев, несколько хороших советов по отладке могут значительно сократить время, затрачиваемое на обнаружение источников ошибок. Несмотря на то, что большинство ошибок, таких как неправильно написанные команды и пропущенные переменные, можно легко обнаружить, некоторые логические ошибки и ошибки выполнения найти очень и очень сложно.

Дополнительные сведения об отладчике Microsoft Script Debugger см. на веб-узле Microsoft Scripting Technologies по адресу http://msdn.microsoft.com/scripting/.

Лучший
способ проследить ход работы сценария
— это выполнить его пошагово в отладчике.
IE8 предлагает встроенный отладчик в
наборе средств разработчика (Меню Сервис
— Средства разработчика). Для некоторых
других браузеров также существуют
отладчики, доступные как плагины —
например, FireBug.

Откройте
страницу в IE8 и запустите Средства
разработчика. На вкладке Сценарий
имеются кнопки для запуска отладки и
пошагового выполнения команд сценария.
На правой панели можно просмотреть
локальные переменные (определённые в
текущей функции), а также произвольные
выражения, включающие объекты модели
документа, их свойства и даже вызовы
методов.

Поставьте
точку останова на начало интересующей
нас функции и запустите отладку. Нажав
кнопку «Добавить в корзину» на
веб-странице, вы тем самым запустите
обработчик события click,
и отладчик покажет команду в точке
останова. Двигайтесь пошагово, наблюдая
за всеми объектами, влияющими на логику
обработчика.

Отладка
помогает выявить те ошибки в программе,
которые появляются вследствие неточного
понимания смысла тех или иных свойств
и методов объектов модели документа —
всегда можно посмотреть, чему в
действительности равно то или иное
свойство, или что выдаёт тот или иной
метод. Также можно выявить ошибки,
связанные с логикой программы — запускается
ли функция при наступлении события,
верно ли сформулированы условный и
циклический операторы и, наконец, если
возникает исключение, то на какой команде
и в каком контексте. Но те ошибки, которые
связаны с синтаксисом, отладчик вряд
ли поможет найти — во многих случаях
браузер просто не поймёт сценария с
такими ошибками. Особенно тщательно
следует следить за соответствием скобок
и тэгов, а также символами-разделителями.

3. Функция Calculate.

Создайте
функцию Calculate()
и уберите комментарий с её вызова в
функции AddToCart.

function
Calculate() {

/*
Счётчики для количества единиц товара
и общей стоимости */

var
qty = 0, amount = 0;

/*
Цикл по всем строкам в теле таблицы */

for
(var i = 0, n = tbl.tBodies[0].rows.length; i < n; i++) {

/*
Увеличиваем qty на значение в 3 столбце
текущей строки */

qty
+= parseFloat(tbl.tBodies[0].rows[i].cells[3].innerHTML);

/*
Увеличиваем amount на значение в 4 столбце
текущей строки */

amount
+= parseFloat(tbl.tBodies[0].rows[i].cells[4].innerHTML);

}

/*
Записываем qty в 3 столбец нижнего
колонтитула */

/*
Записываем amount в 4 столбец нижнего
колонтитула */

}

Код
в тех строках, где оставлено многоточие,
напишите самостоятельно, опираясь на
комментарии.

4. Функция RemoveProduct(elem).

Кнопка
«Удалить», динамически вставляемая
в правую ячейку каждой строки заказа,
должна выполнять свою работу —
следовательно, необходимо назначить
ей обработчик (назовём его RemoveProduct)
и написать его код. Этот обработчик
имеет существенное отличие от предыдущих,
которое заключается в том, что смысл
его работы зависит от контекста вызова:
удалять нужно именно ту строку, в которой
кнопка расположена. Таким образом,
обработчик должен принимать параметр,
определяющий контекст. Это можно сделать
различными путями, и здесь мы предлагаем
наиболее типичный. Если назначить кнопке
обработчик следующим образом:
onclick=»RemoveProduct(this)»,
то функция RemoveProduct получит в качестве
параметра ссылку на тот объект, который
принял событие (в данном случае — щелчок
мыши). Очевидно, обладая ссылкой на
элемент в таблице, можно каким-то образом
определить номер (index)
строки таблицы, в которой он находится,
и применить метод таблицы deleteRow(index).
Отношение между строкой и кнопкой
«Удалить» такое: строка является
контейнером ячейки, которая является
контейнером кнопки. Ссылку на контейнер
элемента можно получить при помощи
свойства parentNode
этого элемента. С учётом этих соображений
код рассматриваемой функции примет
следующий вид:

function
RemoveProduct(elem) {

tbl.deleteRow(elem.parentNode.parentNode.rowIndex);

Calculate();

}

Вставьте
эту функцию в скрипт (и не забудьте
правильно описать её вызов в динамическом
определении кнопки — см. функцию
AddToCart).
Сохраните документ, обновите страницу
в браузере и проверьте добавленную
функциональность.

Понравилась статья? Поделить с друзьями:
  • Откуда сценарий матрицы
  • Откуда сценарий звездных войн
  • Откуда пошел праздник день народного единства 4 ноября
  • Откуда прощенное воскресенье взялся праздник
  • Отмененный праздник 7 ноября