#javascript
#javascript
Вопрос:
<html>
<body>
<input type="text" onFocus="javascript:findPosY()"/>
<script type="text/javascript">
eval( function findPosY(){alert("OK");});
</script>
</body>
</html>
При выполнении приведенного выше кода функция eval() не вызывается и предупреждение не отображается.
Ответ №1:
Комментарии:
1. @ Mr.alex в качестве упомянутой вами ссылки, если передать строку через eval, то она может быть атакована злоумышленником. Любой альтернативный способ, каково ваше предложение.
2. @BALA Нет причин, по которым
eval()
будет использоваться, если вы хотите выполнить свой пример кода. Почему вы хотите использоватьeval()
?3. Дорогой Алекс, в нашем сценарии проекта, когда мы динамически генерировали все текстовые поля ex и т.д., Некоторые js-скрипты также динамически генерировались в виде строки, поэтому, используя innerhtml, я беру эту строку и передаю eval.so я использую eval. есть какой-нибудь альтернативный способ для этого??? высоко ценится..
4. @BALA Я не могу понять, что вы пытаетесь сделать.
5. @BALA: если я вас правильно понял, и что JS сгенерирован, вам все равно не нужно помещать его внутрь
eval
. она запустится, как только будет отправлена клиенту. ну .. если только вы не собираетесь вызывать функцию. для этого вы можете добавитьfindPosY()
в конце..
Ответ №2:
Ваш код выполняет двойную оценку. Первый eval
используется для встроенного обработчика событий (который, кстати, не нуждается в javascript:
части). Затем вы пытаетесь eval
в своем теге script. Как указано в других ответах, eval
требуется строка. Но в этом случае eval
линг совершенно не нужен. Ваш фрагмент должен быть написан следующим образом:
<html>
<body>
<input type="text" onfocus="findPosY()"/>
<script type="text/javascript">
function findPosY(){
alert("OK");
}
</script>
</body>
</html>
Комментарии:
1. @kooilnc вы правы, но js генерируется динамически, поскольку, пожалуйста, учтите, что мы создаем пользовательский интерфейс на основе xml.so на основе значений xml, например <inputtype> textbox </inputtype> означает, что мы динамически сгенерировали <тип ввода =»text» onfocus = «somemethod ()» значение = «1» id = «txt1» /> как часть этого, мы динамически сгенерировали некоторый код javascript, поэтому с помощью html я отобразил js-код в пользовательском интерфейсе, для этого я использую метод eval. но можем ли мы достичь этого без метода eval .. дайте мне знать о любых сомнениях…
2. @BALA: ну, в таком случае вам следует убедиться, что вы вычисляете строку.
eval('function findPosY(){alert("OK");}');
. Смотрите jsfiddle.net/58eKh
Ответ №3:
Вы должны передать строку в функцию eval:
<html>
<body>
<input type="text" onFocus="javascript:findPosY()"/>
<script type="text/javascript">
eval( 'function findPosY(){alert("OK");}');
</script>
</body>
</html>
Комментарии:
1. Спасибо farshid, но использование eval, подобного приведенному выше, опасно, потому что третья сторона может легко взломать код или передать вирус …. как этого избежать
2. уважаемый дамодар, приведенный выше код работает, вы проверяете, в каком браузере??
3. @BALA: итак, главный вопрос в том, почему вы вообще используете eval?
4. да, можете ли вы указать какой-либо альтернативный вариант без использования eval, выполняющий js-код в виде строки (в основном функция также поддерживается)
Ответ №4:
<html>
<body>
<input type="text" onFocus="javascript:findPosY()"/>
<script type="text/javascript">
eval('(function (){alert("OK");})()');
</script>
</body>
</html>
Пожалуйста, обратите внимание на скобку в конце строки, которая оценивается, это вызовет функцию.
Комментарии:
1. это привело бы к появлению предупреждения «OK» во время загрузки. Я почти уверен, что это не то, что задумывал OP.
2. Я думаю, что это то , что нужно OP, смотрите его последнюю строку: «При выполнении приведенного выше кода функция eval() не вызывается и предупреждение не отображается». Я предполагаю, что предупреждение является заменой некоторого кода, который должен выполняться операцией во время загрузки.