Глобальные переменные Javascript, которые нельзя изменить в обработчике onsubmit - PullRequest
0 голосов
/ 21 июля 2009

Я прикрепил обработчик onsubmit в теге вида:

<form action="file.php" method="post" onsubmit=" return get_prepared_build(this);" >

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

Есть ли проблемы с областью видимости, когда функции javascript вызываются таким образом из тегов / атрибутов?

Вот функция:

function give_link(results)
{
    document.title = 'visibility test';
    return false;
}

тогда ниже в документе у меня есть

<script>alert('test' + document.title );</script>

В результате - в окне у меня новый заголовок, но в окне предупреждения отображается старое значение переменной.

1 Ответ

1 голос
/ 21 июля 2009

Чтобы ответить на ваш последний вопрос, нет, нет проблем с областью видимости при вызове функций JavaScript из тегов / атрибутов:

<script type="text/javascript">
var x = 'Hello';
function get_prepared_build(f) {
    alert('Start get_prepared_build: x=' + x + '; document.cookie=' + document.cookie);
    x = 'There';
    // deliberately invalid cookie for test purposes only
    document.cookie = 'test';
    alert('End get_prepared_build: x=' + x + '; document.cookie=' + document.cookie);
    return false;
}
</script>
<form action="file.php" method="post" onsubmit="var ret=get_prepared_build(this);alert('Outside get_prepared_build: x=' + x + '; document.cookie=' + document.cookie);return ret;">
<input type="submit">
</form>

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

EDIT: в вашем примере функция, которая обновляет document.title, никогда не вызывается или вызывается после alert() текущего значения, поэтому document.title не изменяется.

<script type="text/javascript">
function changeDocumentTitle(f) {
    // this only runs onsubmit, so any alert()s at the bottom
    // of the page will show the original value before the
    // onsubmit handler fires
    document.title = 'new value';
    return false;
}
</script>
<form onsubmit="return changeDocumentTitle(this);">
<input type="submit">
</form>
<script type="text/javascript">
// this executes when the page loads, so it will show
// the value before any onsubmit events on the page fire
alert(document.title); // original value
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...