2015-01-02 5 views
-2

У меня возникла проблема с некоторым кодом javascript, который я не могу найти решение и надеюсь, что некоторые из вас могут помочь мне найти решение.ошибки оператора javascript IF

Проблема заключается в том, что в коде, указанном ниже, указан код if(a>b). Я получаю разные ошибки в зависимости от того, как я пишу вывод if if в зависимости от того, где я выгляжу. Я получаю разные ошибки.

инструмент разработчика Chrome говорит:

Uncaught SyntaxError: Unexpected token ;

инструмент разработчика IE говорит:

Uncaught SyntaxError: Unexpected token)

я получаю тот же результат, если я пишу if(3>1) так что я не думаю, что его или б, что является проблема.

Если я пытаюсь if(b<a) то GlassFish бросает исключение, сказав, что ошибка ниже, где строка 39 является, если оператор

Error Traced[line: 39] The content of elements must consist of well-formed character data or markup.

if(1<3) производит один и тот же результат, как if(b<a)

теперь, если я пишу if(3===1) или if(3===3) его отлично работает, и код работает отлично и дает ожидаемый результат для использования знаков «===», но теперь мне нужно иметь возможность использовать < или >.

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

Я перекомпилировал его много раз и перезапустил сервер, но пока ничего не добился.

<?xml version="1.0" encoding="UTF-8" ?> 
 
<!DOCTYPE html> 
 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:cc="http://java.sun.com/jsf/composite" xmlns:tp="http://java.sun.com/jsf/composite/components" xmlns:fn="http://java.sun.com/jsp/jstl/functions"> 
 
<cc:interface> 
 
    <cc:attribute name="text" type="java.lang.String" required="true" /> 
 
    <cc:attribute name="maxsize" type="java.lang.Integer" required="true" /> 
 
    <cc:attribute name="style" type="java.lang.String" required="false" /> 
 
</cc:interface> 
 
<cc:implementation> 
 

 
    <p id="par#{component.clientId}" style="#{cc.attrs.style}"> 
 
    <span id="span#{component.clientId}"><h:outputText value="#{cc.attrs.text}" /></span> 
 
    </p> 
 

 

 

 
    <script> 
 
    var span = $("[id='span#{component.clientId}']"); 
 

 
    var linkShow = $("<a/>"); 
 
    linkShow.attr("id", "linkShow#{component.clientId}"); 
 
    linkShow.attr("style", "color: #07A0DD;"); 
 
    linkShow.text("Visa mer"); 
 
    linkShow.hide(); 
 

 
    var linkHide = $("<a/>"); 
 
    linkHide.attr("id", "linkHide#{component.clientId}"); 
 
    linkHide.attr("style", "color: #07A0DD;"); 
 
    linkHide.text("Visa mindre"); 
 
    linkHide.hide(); 
 

 
    var a = "#{cc.attrs.text}".length; 
 
    var b = #{cc.attrs.maxsize}; 
 
    if (a > b) { 
 
     span.text("#{cc.attrs.text}".substring(0, # { 
 
     cc.attrs.maxsize 
 
     }) + "... "); 
 
     $("[id='par#{component.clientId}']").append(span); 
 
     $("[id='par#{component.clientId}']").append(linkShow); 
 
     $("[id='par#{component.clientId}']").append(linkHide); 
 

 

 
     $("[id='linkShow#{component.clientId}']").show(); 
 
     $("[id='linkShow#{component.clientId}']").click(function() { 
 
     $("[id='span#{component.clientId}']").text("#{cc.attrs.text}"); 
 
     $("[id='linkHide#{component.clientId}']").show(); 
 
     $("[id='linkShow#{component.clientId}']").hide(); 
 
     }); 
 

 
     $("[id='linkHide#{component.clientId}']").click(function() { 
 
     $("[id='span#{component.clientId}']").text("#{cc.attrs.text}".substring(0, # { cc.attrs.maxsize}) + "... "); 
 
     $("[id='linkShow#{component.clientId}']").show(); 
 
     $("[id='linkHide#{component.clientId}']").hide(); 
 
     }); 
 
    } 
 
    </script> 
 
</cc:implementation> 
 

 
</html>

+5

'вар б = # {' ??? Откройте консоль и отлаживайте ее. Не задавайте вопрос о SO только для синтаксической ошибки. ** EDIT: ** Хорошо, я вижу, что это относится к движку шаблонов, поэтому, по крайней мере, используйте соответствующий тег в вопросе –

+0

Отладчик обычно также дает вам строку, которая вызывает ошибку, проверьте эту строку. – illinoistim

+0

Ive проверил отладку, и как a, так и b дают правильные значения, где в случае, когда я тестировал a дал 1006, а b - 200. Как упоминалось в комментарии выше, ive заменил a и b на 3 и 1, и это stil производит тот же результат , –

ответ

1

решаемые проблемы. Как отмечалось, проблема заключалась в том, что в шаблоне Engine он не смог понять некоторых операторов. Поместив его в файл cdata, я решил проблему.

Решение:

<script type="text/javascript"> 
    //<![CDATA[ 

     var span = $("[id='span#{component.clientId}']"); 

     var linkShow = $("<a/>"); 
     linkShow.attr("id", "linkShow#{component.clientId}"); 
     linkShow.attr("style", "color: #07A0DD;"); 
     linkShow.text("Visa mer"); 
     linkShow.hide(); 

     var linkHide = $("<a/>"); 
     linkHide.attr("id", "linkHide#{component.clientId}"); 
     linkHide.attr("style", "color: #07A0DD;"); 
     linkHide.text("Visa mindre"); 
     linkHide.hide(); 

     var a = "#{cc.attrs.text}".length; 
     var b = #{cc.attrs.maxsize}; 
     if (a > b) 
     { 
      span.text("#{cc.attrs.text}".substring(0,#{cc.attrs.maxsize}) + "... "); 
      $("[id='par#{component.clientId}']").append(span); 
      $("[id='par#{component.clientId}']").append(linkShow); 
      $("[id='par#{component.clientId}']").append(linkHide); 


      $("[id='linkShow#{component.clientId}']").show(); 
      $("[id='linkShow#{component.clientId}']").click(function() { 
       $("[id='span#{component.clientId}']").text("#{cc.attrs.text}"); 
       $("[id='linkHide#{component.clientId}']").show(); 
       $("[id='linkShow#{component.clientId}']").hide(); 
      }); 

      $("[id='linkHide#{component.clientId}']").click(function() { 
       $("[id='span#{component.clientId}']").text("#{cc.attrs.text}".substring(0,#{cc.attrs.maxsize}) + "... "); 
       $("[id='linkShow#{component.clientId}']").show(); 
       $("[id='linkHide#{component.clientId}']").hide(); 
      }); 
     } 
     // ]]> 
    </script> 
Смежные вопросы