Как я выхожу из строки в коде JavaScript в onClick обработчике?

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

64
задан Peter Mortensen 4 May 2015 в 17:12
поделиться

10 ответов

В JavaScript можно закодировать одинарные кавычки "\x27" и двойные кавычки как "\x22". Поэтому с этим методом Вы можете, как только Вы в (дважды или единственные) кавычки строкового литерала JavaScript, используйте \x27 \x22 безнаказанно без страха перед любыми встроенными кавычками, "вспыхивающими" Вашей строки.

\xXX для символов < 127, и \uXXXX для Unicode, так вооруженный этим знанием, можно создать устойчивое функция JSEncode для всех символов, которые являются вне обычного белого списка.

, Например,

<a href="#" onclick="SelectSurveyItem('<% JSEncode(itemid) %>', '<% JSEncode(itemname) %>'); return false;">Select</a>
78
ответ дан Peter Mortensen 24 November 2019 в 15:49
поделиться

Любой хороший достойный механизм шаблонной обработки будет иметь "кавычки Escape" функцией. Наш (также собственной разработки, где я работаю) также имеет функцию для выхода из кавычек для JavaScript. В обоих случаях переменная шаблона тогда просто добавляется с _esc или _js_esc, в зависимости от которого Вы хотите. Вы никогда не должны производить пользовательский контент к браузеру, которого не оставили, по моему скромному мнению.

0
ответ дан livingtech 24 November 2019 в 15:49
поделиться

Ответы здесь, что Вы не можете выйти из кавычек с помощью JavaScript и что необходимо запустить с завершенных строк.

Поэтому. Нет никакого способа способности JavaScript обработать строку 'Marge, сказал, что "я посмотрю, который был" Peter', и Вам нужны Ваши данные быть убранными прежде, чем предложить его сценарию?

0
ответ дан Steve Perks 24 November 2019 в 15:49
поделиться

Во-первых, это было бы более просто, если бы onclick обработчик был установлен этот путь:

<a id="someLinkId"href="#">Select</a>
<script type="text/javascript">
  document.getElementById("someLinkId").onClick = 
   function() {
      SelectSurveyItem('<%itemid%>', '<%itemname%>'); return false;
    };

</script>

Тогда itemid и itemname нужно оставить для JavaScript (то есть, " становится \", и т.д.).

при использовании Java на стороне сервера Вы могли бы смотреть на класс StringEscapeUtils от общего Ленга Джакарты. Иначе не должно занимать слишком много времени писать Ваш собственный 'escapeJavascript' метод.

1
ответ дан Peter Mortensen 24 November 2019 в 15:49
поделиться

Используйте библиотека Microsoft Anti-XSS , который включает JavaScript, кодируют.

1
ответ дан Peter Mortensen 24 November 2019 в 15:49
поделиться

Другое интересное решение могло бы состоять в том, чтобы сделать это:

<a href="#" itemid="<%itemid%>" itemname="<%itemname%>" onclick="SelectSurveyItem(this.itemid, this.itemname); return false;">Select</a>

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

Да, это делает , создают HTML, который строго недопустим. Однако это допустимая техника, и все современные браузеры поддерживают его.

, Если бы это был мой, я, вероятно, пошел бы со своим первым предложением и удостоверился бы, что значения закодированы HTML , и вышли из одинарных кавычек.

3
ответ дан Dan 24 November 2019 в 15:49
поделиться

Если это войдет в HTML-атрибут, Вам будет нужно к обоим HTML - кодируют (как минимум: > к &gt; < к &lt и " к &quot;) это, и одинарные кавычки Escape (с обратной косой чертой), таким образом, они не вмешиваются в Ваше заключение в кавычки JavaScript.

Лучший способ сделать это с Вашей системой шаблонной обработки (расширяющий его, при необходимости), но Вы могли просто сделать несколько функций выхода/кодирования и обернуть их обоих вокруг любых данных, это идет туда.

И да, это совершенно допустимо (корректный, даже) к Escape HTML все содержание Ваших HTML-атрибутов, даже если они содержат JavaScript.

8
ответ дан Dan 24 November 2019 в 15:49
поделиться

Попытка избегает использования строковых литералов в Вашем HTML и использует JavaScript для привязки событий JavaScript.

кроме того, избегайте 'href =#', если Вы действительно не знаете то, что Вы делаете. Это повреждает такое удобство использования для навязчивого middleclickers (новичок вкладки).

<a id="tehbutton" href="somewhereToGoWithoutWorkingJavascript.com">Select</a>

предпочтительная библиотека My JavaScript просто, оказывается, jQuery:

<script type="text/javascript">//<!-- <![CDATA[
jQuery(function($){
   $("#tehbutton").click(function(){
        SelectSurveyItem('<%itemid%>', '<%itemname%>');
        return false;
   });
});
//]]>--></script>

, Если Вы, оказывается, представляете список ссылок как этот, можно хотеть сделать это:

<a id="link_1" href="foo">Bar</a>
<a id="link_2" href="foo2">Baz</a>

<script type="text/javascript">
   jQuery(function($){
        var l = [[1,'Bar'],[2,'Baz']];
        $(l).each(function(k,v){
           $("#link_" + v[0] ).click(function(){
                SelectSurveyItem(v[0],v[1]);
                return false;
           });
        });
   });
 </script>
9
ответ дан Peter Mortensen 24 November 2019 в 15:49
поделиться

Используйте скрытые промежутки, один каждый для каждого из параметров <%itemid%> и <%itemname%> и запишите их значения в них.

, Например, промежуток для <%itemid%> был бы похож <span id='itemid' style='display:none'><%itemid%></span> и в функции JavaScript SelectSurveyItem для выбора аргументов от этих промежутков innerHTML.

10
ответ дан Shyam 24 November 2019 в 15:49
поделиться

Объявите отдельные функции в < head> разделите и вызовите тех в своем onClick методе. Если у Вас есть партии, Вы могли бы использовать схему именования, которая нумерует их, или передайте целое число в в Вашем onClicks и имейте большой оператор переключения в функции.

1
ответ дан moonshadow 24 November 2019 в 15:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: