作者 主題: [javascript]請問一個js的寫法 在firefox沒問題 IE8上卻會出錯  (閱讀 12185 次)

0 會員 與 1 訪客 正在閱讀本文。

alucardc

  • 可愛的小學生
  • *
  • 文章數: 22
    • 檢視個人資料
首先要先說明一下我對javascript與jQuery都是非常非常*n新手 只是copy公司前輩的程式碼來用

所以先說明一下這些程式碼的目的

目的 :  在html做出來的一個下拉式選單裡 若是選中了其中一個選項 (信用卡)

此時畫面中會跑出信用卡卡號、有效日期等等的 input 欄位

若是選了別的選項,這些欄位則不會顯示出來,程式碼如下

html部分
/////////////////////////////////////////////////////////////////////


<span id='credit'>
信用卡號:
<input type='text' name='credid' id='credid' value='<?=$credid?>' size='20' maxlength='19' /></br>

信用卡有效日期:   
<select id='expiry_year' name='expiry_year' onchange='update_expiry()'><?=select_expiry_year();?></select>年

<select id='expiry_mon' name='expiry_mon' onchange='update_expiry()'>
<?=select_expiry_mon()?></select>月

</span>


javascript部分
/////////////////////////////////////////////////////////////////////


<script type='text/javascript'>

function show_credit(obj){
credit = document.getElementById('credit');
if(obj.value == '信用卡'){
credit.style.display = 'inline';
}
else{
credit.style.display = 'none';
}
}

var tooltip = new Array();

$(document).ready(show_credit(document.getElementById('billac_type')));

jQuery(function($){   
$("#credid").mask("9999-9999-9999-9999",{completed:function(){alert("信用卡號格式不符: "+this.val());}});
$("#credit_date").mask("99/99",{completed:function(){alert("信用卡有效日期不符: "+this.val());}}) ;

});


</script>


/////////////////////////////////////////////////////////////////////

IE8 左下角 錯誤三角型 出現的錯誤訊息是

網頁錯誤詳細資料

使用者代理程式: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
時間戳記: Wed, 5 Sep 2012 01:24:13 UTC

訊息: 物件不支援此屬性或方法
行: 361
字元: 4
程式碼: 0
URI: http://localhost/WEBERP/000werp/store/index.php?act=shopcar


然後361行 就是
credit = document.getElementById('credit');
 這邊

不知道該怎麼修正這個錯誤?
又或者是有另外可以達成同樣目的的程式寫法,有範例可以給我參考

謝謝各位
« 上次編輯: 2012-09-05 09:44 由 alucardc »

FIEND

  • 鑽研的研究生
  • *****
  • 文章數: 700
    • 檢視個人資料
    • http://bbs.ecstart.com
IE8 會先載入 ELEMENT 才可以 在 JS 上 認的出 你指定的 OBJECT ID

很王八蛋的設計. ( SORRY 我是超級排軟派 )

解法 :

1. 在 MINE TYPE 上 下 :
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

2. 直接把 JS 放在 ELEMENT 下面

<BODY>

ELEMENT .......


JS : GET Object id.

</BODY>

你累了嗎? 這樣不行 , 人要比 LINUX 兇 @@ " ......

FIEND

  • 鑽研的研究生
  • *****
  • 文章數: 700
    • 檢視個人資料
    • http://bbs.ecstart.com
講個笑話~~

很多年以前~剛失戀...

有個客戶一直PUSH 我去追他們配合的微軟女業務.

那個業務天天往他們公司跑. 而且聽說很正點~~~

當時我一直沒有動作.

@@" 因為我討厭微軟~~~


有冷到~~哈哈~~

你累了嗎? 這樣不行 , 人要比 LINUX 兇 @@ " ......

alucardc

  • 可愛的小學生
  • *
  • 文章數: 22
    • 檢視個人資料
IE8 會先載入 ELEMENT 才可以 在 JS 上 認的出 你指定的 OBJECT ID

很王八蛋的設計. ( SORRY 我是超級排軟派 )

解法 :

1. 在 MINE TYPE 上 下 :
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

2. 直接把 JS 放在 ELEMENT 下面

<BODY>

ELEMENT .......


JS : GET Object id.

</BODY>

感謝回複

第一個方法我加了還是沒有用

第二個方法 ... 是說把

<script type='text/javascript'>
   function show_credit(obj){
      credit = document.getElementById('credit');
      if(obj.value == '信用卡'){
         credit.style.display = 'inline';
      }
      else{
         credit.style.display = 'none';
      }
   }
</script>

這邊改變位置嗎... 改了還是一樣

FIEND

  • 鑽研的研究生
  • *****
  • 文章數: 700
    • 檢視個人資料
    • http://bbs.ecstart.com
IE8 會先載入 ELEMENT 才可以 在 JS 上 認的出 你指定的 OBJECT ID

很王八蛋的設計. ( SORRY 我是超級排軟派 )

解法 :

1. 在 MINE TYPE 上 下 :
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

2. 直接把 JS 放在 ELEMENT 下面

<BODY>

ELEMENT .......


JS : GET Object id.

</BODY>

感謝回複

第一個方法我加了還是沒有用

第二個方法 ... 是說把

<script type='text/javascript'>
   function show_credit(obj){
      credit = document.getElementById('credit');
      if(obj.value == '信用卡'){
         credit.style.display = 'inline';
      }
      else{
         credit.style.display = 'none';
      }
   }
</script>

這邊改變位置嗎... 改了還是一樣

你有先讓 ELEMENT 上的 ID 被讀取再去 叫 OBJECT ID 嗎?

你累了嗎? 這樣不行 , 人要比 LINUX 兇 @@ " ......

FIEND

  • 鑽研的研究生
  • *****
  • 文章數: 700
    • 檢視個人資料
    • http://bbs.ecstart.com

先利用  alert() 去判斷 .

credit = document.getElementById('credit')

的 credit 有沒有抓到東西.

alert(credit) ;

把 JS 的位置放在 ELEMENT 上指定 OBJECT ID 的 HTML CODE 下.

看看 credit 用 ALERT 吐出來的是什麼內容.


你累了嗎? 這樣不行 , 人要比 LINUX 兇 @@ " ......

alucardc

  • 可愛的小學生
  • *
  • 文章數: 22
    • 檢視個人資料

先利用  alert() 去判斷 .

credit = document.getElementById('credit')

的 credit 有沒有抓到東西.

alert(credit) ;

把 JS 的位置放在 ELEMENT 上指定 OBJECT ID 的 HTML CODE 下.


看看 credit 用 ALERT 吐出來的是什麼內容.




可以了 非常感謝你

我把 credit = document.getElementById('credit') 這行 拉到

function show_credit(obj){ }  上面就 可以了

雖然IE還是有錯誤  但可以正常隱藏跟顯示

然後我把 credit = 都去掉 只剩下

document.getElementById('credit') 就 ok了

(不知道原本這語法是有啥問題 把getElement到的東西存到credit變數不行嗎?)

FIEND

  • 鑽研的研究生
  • *****
  • 文章數: 700
    • 檢視個人資料
    • http://bbs.ecstart.com

先利用  alert() 去判斷 .

credit = document.getElementById('credit')

的 credit 有沒有抓到東西.

alert(credit) ;

把 JS 的位置放在 ELEMENT 上指定 OBJECT ID 的 HTML CODE 下.


看看 credit 用 ALERT 吐出來的是什麼內容.




可以了 非常感謝你

我把 credit = document.getElementById('credit') 這行 拉到

function show_credit(obj){ }  上面就 可以了

雖然IE還是有錯誤  但可以正常隱藏跟顯示

然後我把 credit = 都去掉 只剩下

document.getElementById('credit') 就 ok了

(不知道原本這語法是有啥問題 把getElement到的東西存到credit變數不行嗎?)

引用
我把 credit = document.getElementById('credit') 這行 拉到

function show_credit(obj){ }  上面就 可以了

直譯式語言 要先宣告才能用.

不像編譯式的  , 宣告位置可以放在 執行位置下面.

你的CODE 犯了這個錯.

學會用 ALERT 去 DEBUG 速度就快多了.

#####################


IE8 的錯誤訊息.... 我也不知道~AP 層的瀏覽器環境很亂 一直都有統一的格式 W3C 規範~

但是錢軟很愛亂改東西 , 而且不喜歡 遵守 W3C 的規範.

尤其是每次大改版 都不能上下相容.

我年輕的時候 為了錢軟 常常加班找問題........

習慣就好...

« 上次編輯: 2012-09-05 12:37 由 FIEND »
你累了嗎? 這樣不行 , 人要比 LINUX 兇 @@ " ......

FIEND

  • 鑽研的研究生
  • *****
  • 文章數: 700
    • 檢視個人資料
    • http://bbs.ecstart.com
如果你不喜歡常常被錢軟整

可以使用 第三方包好的套件來串你要的功能 , 問題會比較少.

因為第三方 己經幫你在 包裝套件的核心部份把問題都解決掉了.


推薦你用 JQUERY  相容的瀏覽器版本較多.

但是不支援 IE6 以下的版本.



你累了嗎? 這樣不行 , 人要比 LINUX 兇 @@ " ......