Javascript в теле html выполняется при обнаружении? - PullRequest
3 голосов
/ 13 мая 2009

Я унаследовал кодовую базу ASP.net и у меня очень ограниченные навыки ASP.net. Я пытаюсь понять, почему что-то работает, а также почему это работает только в IE.

На странице появляется следующий код: -

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="map.aspx.cs" Inherits="Romtrac.auth_map" Culture="auto" UICulture="auto" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>
        <% = Resources.Resource.map %>
    </title>
</head>
<body>    
    <form id="adminlw_map_form" action="<%=geturl()%>" method="post"  >

    <% = Resources.Resource.loading %>...
    <textarea name="xml" id="xml" runat="server" style="display:none" cols="1" rows="1"></textarea>
    </form>
    <script language="javascript" type="text/javascript" >
      //submit main form immediately
        document.getElementById('adminlw_map_form').submit();
    </script>
</body>
</html>

Этот код отлично работает в ASP.net. Форма автоматически отправляется, и возвращаемая страница корректно отображается в Iframe. Мой вопрос:

1) Javascript внутри тела просто выполняется, когда он встречается? Это хорошая практика или она должна выполняться в ответ на событие?

2) Почему это не работает в других браузерах?

Ответы [ 5 ]

4 голосов
/ 13 мая 2009
  1. Да
  2. Javascript выполняется до того, как браузер полностью отобразит страницу. В этом случае форма не была обработана и недоступна через DOM.

Выполнение должно происходить после полной загрузки DOM браузером и может быть реализовано путем инкапсуляции вызова внутри функции и вызова этой функции через событие onload тела или с помощью библиотеки javascript, такой как jquery, для перехвата в событие загрузки страницы.

3 голосов
/ 13 мая 2009

1) Да, нет. JQuery лучше всего справляется с функцией $ (document) .ready (), но перед запуском Javascript следует дождаться завершения загрузки страницы.

2) Сделайте # 1, и вам не нужно об этом беспокоиться. Однако я оставлю слово открытым для кого-то с лучшим ответом.

2 голосов
/ 14 мая 2009

Некоторые браузеры запрещают отправку формы без взаимодействия с пользователем при загрузке страницы (это угроза безопасности). У меня была эта проблема несколько раз в прошлом. Я бы объединил загрузку страницы с window.setTimeout, скажем, 100 мс.

<body onload="window.setTimeout( document.getElementById('adminlw_map_form').submit, 100)">
....
1 голос
/ 14 мая 2009

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

0 голосов
/ 13 мая 2009

То же, что и Ответ Майка Робинсона , но вы наверняка можете просто использовать <body onload="myfunction();">?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...