今天发现一个莫名其妙的问题。我有这样一段代码:
<script language="javascript" src="<%=request.getContextPath()%>/scripts/formValidate.js"></script>
<script language="javascript" src="<%=request.getContextPath()%>/scripts/jquery-1.3.1.js"</script>    <%                                             
        String pageState = request.getParameter("pageState");
        if(pageState == null || "".equals(pageState)) {
          pageState = "add";
        }
    %>
<!--------------位置1--------------->
    <script type="text/javascript">
     $(document).ready(function(){
     alert("on load");
     });
    </script>
<!--------------位置1结束-------------------->
    
    <script language="javascript">
         ........javascript略..........
    <script>
    
<!----------位置2---------------><!----------位置2结束----------->
<body></body>问题:位置1的代码不会执行alert("on load")语句,而将位置1的代码剪切至位置2就能顺利执行,谁知道是怎么回事儿?
解答一下!(第一个正解的给全分)
    

解决方案 »

  1.   

    $(document).ready(function(){
      alert("on load");
      });
    表示页面完全载入完成后执行可能是页面还有没有载入完成的元素
      

  2.   

    ready 不等于onload 这点需要清楚
    ready远比onload早发生。我想了解下你的位置2里发生了什么~~~!
      

  3.   

    <!--------------位置1结束-------------------->
       
      <script language="javascript">
      ........javascript略..........//这段进行了什么操作?
      <script>
       
    <!----------位置2--------------->jquery对象和dom对象的相互转换:
    $(".class")      $(".class")[0]  //前者是jquery对象,只能用jquery的方法,后者为dom对象,只可以用dom中的方法
      

  4.   

    很长的一段js:
     <script language="javascript">
        
        function checkForm(obj) {
    isNotEmpty(obj["tick.tickName"],"蜱属名称不能为空!");
    return checkAll();
    }

    //保存
    var imgSize = 1024 * 1024; //最大100K
    function save(obj){
    var vectorTable = document.getElementById("tickTable");
    var available = 0;
    var arr = vectorTable.rows;
    var length = arr.length-2;
    if(length >= 6) {
    alert("最多只能添加5张图片");
    return false;
    } else if(length == 0) {
    //什么都不做,保证每图片添加时也能保存
      }else if(length>0 && length<=5) {
      for(var n=0; n<length; n++) {
    var file = document.getElementsByName("vectorFile")[n];
    if(file.value != "") {
    var val = file.value; 
            if(/^.*?\.(gif|png|jpg|JPG|JPEG|jpeg|bmp)$/.test(val)){ 
            } else { 
                alert("只能上传gif, png, jpg, bmp格式的图片"); 
                return false; 
            }          var image = new Image(); 
            image.onreadystatechange = function(){ 
                if(image.readyState == "complete"){ 
                    if(image.fileSize <=0 || image.fileSize > imgSize) {
                    m = n + 1; 
                        alert("第"+m+"张图片当前文件大小" + image.fileSize / 1024 + "KB, 超出最大限制 " + imgSize / 1024 + "KB"); 
                        available = 1;
                    } else {
                     available = 0;
                  }
                } 
            }         image.src = val; 
    }else {
    alert("请选择上传的文件!"); 
            return false; 
    }
        }
       }          

            if(available == 1) {
    return false;
        } 
    document.vectorTick.action="tick_addParentSubmit.ac";
    }

    //修改
    function edit(obj){
    document.vectorTick.action="tick_edtParentSubmit.ac";
    }

    //查看图片
    function viewImage(){
    document.location.href="<c:url value='/vector/tick/tick_viewImage.ac?tickId=${tickId}'/>";
    }

    //修改图片
    function editImage(){
    var tickId=document.all["tick.tickId"].value;
    document.vectorTick.action="tick_edtImage.ac?tickId="+tickId;
    }

    //用于增加图片时在table中增加新的一行
    var i = 0;
    function addRow() { i = i + 1;
    //如果上传图片多于5个,则提示友好信息
    if(i != 6) {
    var vectorTable = document.getElementById("tickTable");
    //在表中增加一行
    var tr = vectorTable.insertRow();
    //在行中增加两个td,分别在两个td中增加一个input file, img, 并设置tr, td, file, img的属性
    var td = document.createElement('td');
    td.setAttribute('className', 'blue');
    td.setAttribute('align', 'right');
    td.setAttribute('colspan', '1'); var td1 = document.createElement('td');
    td1.setAttribute('align', 'left');
    td1.setAttribute('colspan', '1');

    var inputtext = document.createElement("<INPUT name='vectorFile'>");
    inputtext.setAttribute('type', 'file');
    inputtext.setAttribute('id', 'upload'+i); var button = document.createElement('button');
    button.setAttribute('value', '删除');
    button.setAttribute('className', 'brn_hui');

    var img = document.createElement('img');
    img.setAttribute('id', 'pic'+i);
    img.setAttribute('height', '200');
    img.setAttribute('width', '200');
    img.style.setAttribute('display', 'none'); var tr1 = document.createElement('tr');
    tr1.setAttribute('id', 'dname'+i);
    tr1.style.setAttribute('display', 'none');
    var td2 = document.createElement("<INPUT name='nameImage'>");
    var td3 = document.createElement("<INPUT name='description'>");

    td.appendChild(inputtext);
    td.appendChild(button);
    td1.appendChild(img);
    td1.appendChild(tr1);
    td1.appendChild(td2);
    td1.appendChild(td3);
    td2.outerText = "图片名称:";
    tr.appendChild(td);
    tr.appendChild(td1);

    button.onclick = function(){
    var n=this.parentNode.parentNode.rowIndex
    vectorTable.deleteRow(n)
    i=i-1;           
    setaddImgBtnState();  
        };
        
        setaddImgBtnState();

    }

    function setaddImgBtnState(){
    if(i>=5){
    document.getElementById("addImgBtnSpan").style.display="none";
    }else{
    document.getElementById("addImgBtnSpan").style.display="block";
    }
    }

        </script>
      

  5.   

    <script language="javascript">
      ........javascript略..........
      <script>
    这里也定义了一个ready事件吧jq的覆盖了?
      

  6.   

    问题出在类似这种语句:document.location.href="<c:url value='/vector/tick/tick_viewImage.ac?tickId=${tickId}'/>";
    $与JQuery有冲突,所以不执行。在JQuery语句前加上这样的语句:var jQuery = jQuery.noConflict();
    并将后面的$用jQuery代替,应该就可以了,试试看!Good Luck!