2011-12-22 44 views
2

我有以下簡單的Javascript代碼,只允許將數字輸入到指定的TextField中。我早些時候在很多地方使用過它,例如Servlet,JSP,JSTL/EL,甚至在PHP中也是如此,並且按預期運行良好。然而,在JSF中,我更少關心一些字符需要轉義的Javascript。我盡力讓它運行,但我不能。這裏是Javascript代碼以及JSF的東西。實體名稱必須緊跟實體參考中的'&'

<?xml version='1.0' encoding='UTF-8' ?> 

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core"> 

<h:head> 
<title>Demo</title> 

<script type="text/javascript" language="javascript"> 

    $(document).ready(function() 
    { 
     $("#myForm:txtDemo").keypress(function(event) 
     { 
      if (event.keyCode==46 || event.keyCode==8|| event.keyCode==9 || event.keyCode>=35 && event.keyCode<=40) 
      { 
       // let it happen, don't do anything 
      } 
      else 
      { 
       if (event.charCode<48 || event.charCode>57 || event.charCode==16) 
       { 
          event.preventDefault(); 
       } 
      }      
     }); 
    }); 

</script> 

</h:head> 

<h:body> 
    <h:form id="myForm"> 

     <br/><br/><br/> 
     <h:inputText id="txtDemo" required="true" requiredMessage="Mandatory." validatorMessage="The field should contain al least 10 digits"> 
      <f:validateLength maximum="10" minimum="2"/> 
      <f:validateRegex pattern="[0-9]*"/> 
      <f:ajax event="valueChange" execute="txtDemo msg" render="txtDemo msg"/> 
     </h:inputText><br/> 

     <h:message id="msg" for="txtDemo" showDetail="true" style="color:red"/><br/> 

     <h:commandButton id="btnSubmit" value="Submit"/> 

    </h:form> 
</h:body> 


JavaScript是不被編譯。它分析以下錯誤。

An Error Occurred: 

Error Parsing /Restricted/TempTags.xhtml: Error Traced[line: 14] The entity name 
must immediately follow the '&' in the entity reference. 

我甚至放在Javascript代碼在一個單獨的文件js幷包含在此頁面文件。我也用<h:outputScript></h:outputScript>代替<script></scrip>仍然是同樣的問題。


我也曾嘗試以下看到的Javascript功能是否被調用或不使用alert();去除的功能,但功能本身的錯誤解析代碼甚至沒有打來電話,警告信息是不顯示。

<script type="text/javascript" language="javascript"> 

    $(document).ready(function() 
    { 
     $("#myForm:txtDemo").keypress(function(event) 
     { 
      alert(); 
     }); 
    }); 

</script> 

哪些是需要在使用Javascript必要的修改,把它按預期運行?

+2

當你在'CDATA'標籤(Google的語法)中包裝JS時會發生什麼? – Blender 2011-12-22 04:44:43

+1

@Blender或只是[向下滾動](http://stackoverflow.com/a/8599528/139010)';-)' – 2011-12-22 04:52:35

+1

@MДΓΓБДLL:偷偷摸摸的答案提升,先生。我喜歡。 +1 – Blender 2011-12-22 04:53:18

回答

4

這是XHTML,所以你需要或者

  • Wrap the script contents in CDATA tags

    <script> 
    //<![CDATA[ 
    $(document).ready(function() 
    { 
        // snip... 
    } 
    //]]> 
    </script> 
    
  • 或者移動腳本到外部文件,並使用<h:outputScript />包括。

+0

我試着如你所說,解析錯誤消失,但該函數尚未被調用,應該在指定的'TextField'的'keypress'事件上調用。你能找到一些線索嗎? – Lion 2011-12-22 04:56:03

+0

選擇器有些不可思議:'$(「#myForm:txtDemo」)'。它不會匹配任何元素,因爲':txtDemo'不是一個可識別的僞類。你想要選擇什麼? '

'或''? – 2011-12-22 04:58:49

+0

它是在JSF中選擇一個封閉在表單標籤內的元素的方式。我試圖選擇一個ID爲'myForm'的窗體中包含id爲'txtDemo'的TextField。它可以在JSF中實現,就像這個'myForm:txtDemo' – Lion 2011-12-22 05:03:38

1

如果您正在使用jQuery,你需要參考元素的ID有特殊字符這樣的:

<h:form id="myForm"> 

    <h:inputText id="myInput" /> 

</h:form> 

<script type="text/javascript> 

    $("#myForm\\:myInput").val("some value"); 

</script> 

這是記錄here(在頁面頂部)。

+0

我已經試過這個'#myForm \\:txtDemo'。它不起作用。你能在上面的代碼中找到其他錯誤嗎?它看起來很好,但自從JSF以來,它可能需要一些額外的東西,我認爲。我一直在使用JSF超過2年,但我在JSF中使用Javascript/jQuery的頻率較低。 – Lion 2011-12-22 08:12:25

+0

你在頭文件中包含了jQuery js文件嗎? – 2011-12-22 08:18:05

+0

儘管Javascript函數本身並未被調用,但我盡我所能。它是最大的問題。 – Lion 2011-12-22 08:20:12

0

我發現了同樣的問題,我解決:

if (event.keyCode==46 || event.keyCode==8|| event.keyCode==9 || event.keyCode>=35 &amp;&amp; event.keyCode<=40) { 
    // let it happen, don't do anything 
} 

這不是很酷,但它的工作原理。

相關問題