Переменные и объект настройки Javascript и правильный синтаксис (консоль отладки)
-
20-08-2019 - |
Вопрос
Итак, я пытаюсь вызвать методы на странице и знаю значения, которые хочу поместить в методы, но, похоже, не могу заставить синтаксис работать.Я так себя чувствую, ну..ламеризованный.
Хорошо, вот метод JavaScript на странице
function ReturnValue (sValue, sText)
{
window.focus();
var oForm = document.EditForm;
switch (szType) // Form element name
{
case 'agt':
oForm.agt.value = sText;
oForm.agentman.value = sValue;
oForm.agtid.value = sValue;
oForm.getagt.focus();
break;
case 'county':
oForm.County.value = sValue;
sCurrentCounty = new String(sValue);
document.all("CountyDisp").innerHTML = sText;
document.all("City").value = "";
document.all("CityDisp").innerHTML = "";
document.all("Area").value = "";
document.all("AreaDisp").innerHTML = "";
break;
default:
break;
} // End switch
return;
}
Очень простая функция, и вы могли бы предположить, что параметры были строками, не так ли?Итак, в консоли отладчика сценариев IE8 я попробовал это:
ReturnValue("adf","asdf");// сбой "объект ожидается"
Ожидаемый объект, да, ну, может быть, мне нужны одинарные кавычки для строк, которые я предполагал дальше (на всякий случай).
ReturnValue('adf','asdf');// сбой "объект ожидается"
Ладно, просто уточняю..Итак, мне нужен объект, хранящий строку.Как насчет использования var, я подумал...
вар о = "адф";вар п = "dfsa";ВозвращаемоеЗначение(о,р);//FAIL «Ожидается объект»
Я попробовал использовать одинарные кавычки, просто чтобы быть уверенным.Итак, после всего этого я уверен, что объект нужен.Итак, я попытался создать Object.
о = новый объект();к = новый объект();//{...}
Отсюда я не знал, как добавить строку к объекту, поэтому просто сделал это.
o.value = "текст";k.value = "поле";// "текст" ..."поле"
Хорошо, теперь я взволнован: у меня есть объект с какой-то веревкой, поэтому теперь я пытаюсь снова собрать все это воедино.
ReturnValue (o, z) // Epic Fail «Ожидаемый объект»
Я кладу туда объекты!Теперь я вернулся к исходной точке, может кто-нибудь помочь?
Хорошо, проблема все еще не решена.
После дальнейшего расследования я обнаружил, что сценарий действительно запускается один раз в самом начале загрузки страницы.Я могу отлаживать и ломать код, а пока он находится в режиме паузы, я могу запускать методы.Но после того, как я выпущу и он завершит объявление всех переменных, я не смогу запускать какие-либо методы.Но по какой-то причине тот же метод, который я пытаюсь запустить, можно запустить из всплывающего окна с использованием Window.Opener.ReturnValue(string,string);
Я не понимаю!
Гуру Javascript, где ты, когда ты мне нужен!
Решение
Предполагая, что вы определили szType где-то еще, я вставил эту функцию в временную страницу и поигрался с ней, но не могу воспроизвести эту проблему в IE8 (или FireFox 3).
Погуглив, единственное, что я нашел, это ссылку, в которой говорилось, что если вы неправильно установите тип сценария, вы можете получить это, поскольку IE вообще не будет анализировать блок сценария.Установлен ли ваш блок сценария как «текст/javascript»?
Если это не сработает, можете ли вы предоставить больше используемого кода (возможно, также и разметку)?
С другой стороны, вы можете захотеть использовать что-то вроде jQuery или одну из других библиотек JS.JS, специфичный для браузера, такой как этот, является злом (смерть document.all).
Другие советы
Возможно, szType, один из oForm, oForm.agt и т. д., имеет значение null?
Каково значение szType?Я не вижу, чтобы его где-то ставили, может, на этом и бомбят?Кроме того, эти document.all и form.вероятно, не будет работать ни в чем, кроме IE.document.getElementById('theid') намного лучше подходит для получения элементов dom.
Кроме того, можете ли вы попробовать установить точку останова для функции ReturnValue и пройти через нее?Я не использовал консоль IE8 таким образом, но знаю, что таким образом можно выполнить отладку.
редактировать Может ли он выполнять функции таким образом?Возможно, закомментируем все в ReturnValue и убедитесь, что он действительно может выполнить саму функцию.Возможно, вам придется находиться в сеансе отладки или вызвать функцию через window.ReturnValue.