Javascript没有在应该触发的时候触发


Javascript not triggered when supposed to

为什么在提交表单时没有触发Javascript的isValidEmailAndEqual:

echo("<script language='javascript' type='text/javascript'>
<!--
function isValidEmailAndEqual() {
regExp = /^[^@]+@[^@]+$/;

if((document.subscribe.email1.value.search(regExp) == -1) || !isEqual(document.subscribe.email1.value, document.subscribe.email2.value)) 
   { 
   //alert(isEqual(document.subscribe.email1.value, document.subscribe.email2.value))
       alert('Incorrect entered email addresses. They must be valid e-mail addresses and equal.');
      return false; 
   } 
   //document.subscribeForm.submit();
return true; 
}

-->
</script>");
echo ("<div class='subscribe'>
     <h4>Subscribe</h4>
     <p>Subscribe to iAndApp's newsletter in order to get information about new and updated iPhone games and iPhone applications, that has been released by iAndApp. </p>
     <form action='subscription.php' name='subscribe' method='post'  onsubmit='return isValidEmailAndEqual()'>
        <p class='formlabel'>Förnamn</p> <input type='text' name='first_name'/><br/>
        <p class='formlabel'>Efternamn</p> <input type='text' name='surname'/> <br/>
        <p class='formlabel'>E-mail</p> <input type='text' name='email1'/><br/>
        <p class='formlabel'>Repeat e-mail</p> <input type='text' name='email2'/> <br/>
        <input class='inputsubmit' type='submit' value='Subscribe'/>
     </form>
</div>");

Firebug告诉我页面上没有javascript。

我尝试了带和不带注释和前缀结束注释标记。

我所做的,这可能很重要,是从服务器加载下面的内容,然后添加到div标签。内容呈现出来了,但是脚本仍然不能工作。我还尝试在主/父页面(页面加载内容并将其添加到div)上包含脚本,其中我有其他脚本可以工作(由主/父页面中的组件触发)。

提前感谢!

应该是
echo("<script language='javascript' type='text/javascript'>
<!--
//your code here, obviously not commented
//-->
</script>

通知你,http://www.w3.org/TR/html4/interact/scripts.html h-18.3.2

实际上,它们是被触发的。下面的HTML(与脚本输出的完全一样)会在firefox 5和chrome中触发该函数。作为旁注,您可能不需要html注释(<!---->)。这种做法通常不再需要,因为不支持javascript的浏览器会忽略标签中的所有内容。

也就是说,如果你必须有html注释,注释掉-->以避免它触发JS错误(如Kumar解释的)。

<script language='javascript' type='text/javascript'> 
<!--
function isValidEmailAndEqual() {
regExp = /^[^@]+@[^@]+$/;

if((document.subscribe.email1.value.search(regExp) == -1) || !isEqual(document.subscribe.email1.value, document.subscribe.email2.value)) 
   { 
   //alert(isEqual(document.subscribe.email1.value, document.subscribe.email2.value))
       alert('Incorrect entered email addresses. They must be valid e-mail addresses and equal.');
      return false; 
   } 
   //document.subscribeForm.submit();
return true; 
}

-->
</script><div class='subscribe'> 
     <h4>Subscribe</h4> 
     <p>Subscribe to iAndApp's newsletter in order to get information about new and updated iPhone games and iPhone applications, that has been released by iAndApp. </p> 
     <form action='subscription.php' name='subscribe' method='post'  onsubmit='return isValidEmailAndEqual()'> 
        <p class='formlabel'>Förnamn</p> <input type='text' name='first_name'/><br/> 
        <p class='formlabel'>Efternamn</p> <input type='text' name='surname'/> <br/> 
        <p class='formlabel'>E-mail</p> <input type='text' name='email1'/><br/> 
        <p class='formlabel'>Repeat e-mail</p> <input type='text' name='email2'/> <br/> 
        <input class='inputsubmit' type='submit' value='Subscribe'/> 
     </form> 
</div>