iT邦幫忙

0

請教 FIREFOX 不支援 onclick 的問題該如何處理

  • 分享至 

  • xImage

單純想要用 post 送出表單 , 但是 firefox一直都沒有反應,以下是我的程式碼,想請教該如何處理

<script>
function do_cc(){

fm1.type.value = "ch";
fm1.action = "index.php?act=prd";
fm1.method = "POST";
fm1.target = "_self";
fm1.submit();
return false;

}
</script>

<form name="fm1" enctype="multipart/form-data">
<input type="hidden" name="type">

<input name="search" type="text" class="input_search"/>
<input type="button" value="搜尋" class="input_send" onclick="do_cc('del');"/>

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
14
ihon822
iT邦研究生 2 級 ‧ 2011-06-27 18:46:51
最佳解答

用 form 就可以了 不需要 javascript

&lt;pre class="c" name="code">



&lt;form name="fm1" method="POST" action="index.php">
&lt;input type="hidden" name="type" value="ch">
&lt;input type="hidden" name="act" value="prd">
&lt;input name="search" type="text" class="input_search"/>
&lt;input type="submit" value="搜尋" class="input_send" /> 
&lt;/form>
wiseguy iT邦超人 1 級 ‧ 2011-06-28 00:51:21 檢舉

幹得好啊!
我其實本來是想問 gfskywing 為什麼送個簡單的表單,幹嘛要弄得那麼複雜?
HTML 看起來既沒過濾非法字串,也沒有什麼需要動用 javascript 的地方,
就照您這寫法即可。沒錯!

12
wiseguy
iT邦超人 1 級 ‧ 2011-06-27 16:17:46

你這 HTML 有兩個錯誤:

  1. form 沒有結束 tag。請在 之前補一個 </form>,這樣 form 物件才會建立。
  2. do_cc() 裡面的 fm1 對 javascript 來說,是個全域變數,跟 <form name="fm1"> 一點關係都沒有。如果你想讓 fm1 就是 <form name="fm1">,請在 fm1.type.value = "ch"; 上方再加一行敘述:
    var fm1 = document.forms['fm1'];
12
fillano
iT邦超人 1 級 ‧ 2011-06-28 10:20:03

我的FF5跟Chrome12都能跑XD
請問gfskywing,你用的Firefox是哪個版本?版本跟相容性關係也很大...

另外,gfskywing,你的Javascript寫法,在比較早期的瀏覽器中,大概只有IE可以跑。依照DOM標準的話,你的Javascript應該是:

&lt;pre class="c" name="code">
function do_cc(){
document.getElementsByName('type')[0].value = 'ch';
var fm1 = document.getElementsByName('fm1')[0];
fm1.action = "index.php?act=prd";
fm1.method = "POST";
fm1.target = "_self";
fm1.submit();
}

另外,do_cc最後的return false;是不需要的,通常我們會在onsubmit的事件處理函數中,要抑制他執行submit動作時才需要這樣做。而且你這樣使用onclick時,他實際上是用eval執行裡面的字串,所以在do_cc函數中return false不會有任何作用,你應該使用onclick="do_cc();return false;"。(do_cc()中的return false,只是回到這個eval執行的context環境中,所以沒作用)

還有,form並不需要enctype="multipart/form-data"屬性,除非你要上傳檔案。target="_self"也不需要,因為這是預設值。

fillano iT邦超人 1 級 ‧ 2011-06-28 10:24:47 檢舉

補充一下,更簡潔的話,可以在do_cc()函數中return false,不過要在onclick中要這樣寫:

&lt;pre class="c" name="code">
onclick="return do_cc()"

才會有作用。

我要發表回答

立即登入回答