2012-09-10 41 views
1

所以我有這個代碼,這是一個PHP文件的輸出(因此一些像3等級的東西等)。IE/Chrome中未定義的函數,但不是Firefox

它在Firefox中完美地工作,但Chrome和IE的行爲就像觀察者不存在一樣。

此外,#ratingwrapper的onmouseout功能在Chrome和IE中被視爲「未定義」。令人難以置信的是,爲什麼這兩個瀏覽器完全忽略了JS,而Firefox卻能看到一切。

我嘗試了絕對的一切,甚至打電話給簡單的警報,沒有任何工作在IE和鉻。我嘗試刪除觀察者,並在#ratingwrapper div中執行所有操作,但所有函數都在Chrome中處於「未定義」狀態。

我正在使用原型,標頭js聲明都是按順序的,因爲使用原型的其他腳本在頁面上工作。沒有衝突等等,我被這個無法解釋的錯誤所困擾。

<div class="ratings"> 
     <div class="rating-box" id="ratingbox"> 
      <div class="rating" id="ratingboxfill" style="width:100%"></div> 
     </div> 
    <div id="ratingwrapper" onmouseout="revertProductRating()"></div> 
    <br /><br /> 
    <div id="curpos"></div> 
    <div id="cpos"></div> 
    <span class="amount">3 ratings</span> 
    <input id="newRating" type="hidden" value="0" /> 
</div> 

<script type="text/javascript"> 
    function setNewProductRating(e) { 
     var ratingx = Event.pointerX(e); 
     var ratingy = Event.pointerY(e); 
     var containerLeft = Position.page($('ratingbox'))[0]; 
     var containerTop = Position.page($('ratingbox'))[1]; 
     var hpos = ratingx - containerLeft; 
     var vpos = ratingy - containerTop; 
     $("cpos").update(hpos+","+vpos); 
     if (hpos <= 9) { 
      revertProductRating(10) 
      $("newRating").value=1; 
     } else if(hpos <19) { 
      revertProductRating(20) 
      $("newRating").value=2; 
     } else if(hpos <28) { 
      revertProductRating(30) 
      $("newRating").value=3; 
     } else if(hpos <38) { 
      revertProductRating(40) 
      $("newRating").value=4; 
     } else if (hpos < 47) { 
      revertProductRating(50) 
      $("newRating").value=5; 
     } else if (hpos < 57) { 
      revertProductRating(60) 
      $("newRating").value=6; 
     } else if (hpos < 66) { 
      revertProductRating(70) 
      $("newRating").value=7; 
     } else if (hpos < 76) { 
      revertProductRating(80) 
      $("newRating").value=8; 
     } else if (hpos < 85) { 
      revertProductRating(90) 
      $("newRating").value=9; 
     } else if (hpos < 96) { 
      revertProductRating(100) 
      $("newRating").value=10; 
     } else { 
      revertProductRating() 
     } 
    } 

    function revertProductRating(force=0) { 
     if (force == 0) { 
      //document.getElementById("ratingboxfill").style.width = "100%"; 
      $("curpos").update("force=0"); 
      $("ratingboxfill").setStyle({ 
       width: '100%' 
      }); 
     } else { 
      //document.getElementById("ratingboxfill").style.width = force+"%"; 
      $("curpos").update("force="+force); 
      $("ratingboxfill").setStyle({ 
       width: force+'%' 
      }); 
     } 
    } 

    function sendProductRating() 
    { 
     value = $("newRating").getValue(); 
       window.location = 'http://x.dev/y/' + 'ratingValue/' + value; 
    } 

    $('ratingwrapper').observe('mousemove', setNewProductRating); 
    $('ratingwrapper').observe('click', sendProductRating); 
</script> 
+0

你是否檢查了JavaScript錯誤控制檯?如果是這樣,它說了什麼? –

回答

0

不能在JavaScript中定義默認參數值,所以revertProductRating函數定義是錯誤的。

嘗試將其更改爲這樣:

function revertProductRating(force) { 
    if(arguments.length === 0) { 
     force = 0; 
    } 

    if (force == 0) { 
     //document.getElementById("ratingboxfill").style.width = "100%"; 
     $("curpos").update("force=0"); 
     $("ratingboxfill").setStyle({ 
      width: '100%' 
     }); 
    } else { 
     //document.getElementById("ratingboxfill").style.width = force+"%"; 
     $("curpos").update("force="+force); 
     $("ratingboxfill").setStyle({ 
      width: force+'%' 
     }); 
    } 
} 
+0

它的原型,而不是jQuery。你可能想檢查參數的長度而不是檢查null,以防你希望它們能夠顯式地傳遞null。 –

+0

@JamesMontagne改進了它。 – Tyilo

+0

謝謝,我真的需要一組新的眼睛來看這個。太多的PHP編碼反射,顯然:)這是非常強烈的鉻和即拒絕閱讀整個JS腳本片段正因爲如此,雖然。 – dash

相關問題