最近用了一個古老的解法,就古老的系統只能用古老的解法~
主要是為了做出仿 ajax post input file 的行為
(那為什麼不用 jquery ajax post file 就好,就><...IE太舊在 ajax時不認識 file 這個 type)
所以這個解法的概念就是~
html XXX 內嵌一個 看不見(display:none) 的 iframe AAA,
然後把 form BBB( input type="file", ) post submit 到 iframe AAA 裡~
其 form 的 action (把檔案傳到server) 後 response 結果 會在 iframe AAA裡,
因為 iframe AAA 算子視窗的一個,所以就可以 call parent XXX 裡的 function 做 refresh (就像 ajax 的 callback function)
就~ form (其實這個 form 內容可以用 jqeury.html(xxxx) 生成...可以藏得更裡面XD),target 指向 iframe ,
<form enctype="multipart/form-data" action="xxxxx" id="sub-form" target="sub-iframe" method="POST" >
<input type="file" name="uploadFile" id="uploadFile">
</form>
<iframe style="display: none" id="sub-iframe" src="javascript:false;" name="sub-iframe"></iframe>
定個 callback function 進行後續動作,要傳值進去也是可以的~
function uploadFileCallback() {
.....
}
而在 action response 的內容時~
<html>
<head>
</head>
<body onload="window.parent.uploadFileCallback();">
</body>
</html>
題外話, 用 jquery.html() 組 form 的資料是可行的~可以實現動態 submit 不同的form 內容,然後只看表面上的code是看不出來的喔XD...
2016年3月10日 星期四
2016年1月17日 星期日
fix image width:auto
這問題似乎只有在chrome上會碰到~
在 IE 宣告陣亡之後,問題兒童的寶座快要交給chrome了= =|||...
測了很久,目前的結論就是,chrome的 width:auto,得到的 圖片 長寬不太正常....
正常在 firefox 上 width:auto 會得到 原圖片的大小,但在chrome上有時會有時不會=_=a...
(規則大概就是,開新chrome,開page的那第一次,圖片大小會有問題(有誤差),但是如果縮放視窗、全螢幕、F12,之後看就又對了= =a)
總之,一個一勞永逸的方式就是~自己取得原圖片的原始大小Orz..
此外,自己取圖片的大小並設定還有一個好處就是~
順便解 chrome 在 jquery.load(xxx.html) image進來時,那些 image 的長寬都是0 的問題...
然後搞笑的是...在我的情況下,firefox ctrl+F5時,圖片自動會變 24px??!!!....
一般網路上給的資源大多是只取一個圖片的原始大小,
但在我的case裡,是要全部的圖片都一起 縮放~
就改寫了一下~
重點就是... new Image 來暫存要讀的圖檔~
在 image onload 事件 時,可以拿到他原始的長寬...
然後為了要觸發事件, 所以在寫完 onload 事件後,再去把 image 的 src 指向位置過去。
http://stackoverflow.com/questions/12354865/image-onload-event-and-browser-cache
var myimgs = $('.myimg');
var tmpImg = [];
for(var i = 0 ; i < myimgs.length ; i++) {
....
tmpImg[i] = new Image(); tmpImg[i].alt = i; tmpImg[i].isload = '0'; tmpImg[i].onload = function() { var height = this.height; var width = this.width; $(myimgs[ this.alt ]).css('width', width); $(myimgs[this.alt]).css('width', Math.floor(parseInt(width)*imgscale)+'px'); tmpImg[this.alt].isload = '1'; //check if all image load ok?? var flag = true; for(var i = 0 ; i < tmpImg.length ; i++) { if ( tmpImg[i].isload == '0') { flag = false; break; } } if (flag) { ...... } } tmpImg[i].src = $(myimgs[i]).attr('src');
....
$(myimgs[i]).css('height', 'auto');
}
在 IE 宣告陣亡之後,問題兒童的寶座快要交給chrome了= =|||...
測了很久,目前的結論就是,chrome的 width:auto,得到的 圖片 長寬不太正常....
正常在 firefox 上 width:auto 會得到 原圖片的大小,但在chrome上有時會有時不會=_=a...
(規則大概就是,開新chrome,開page的那第一次,圖片大小會有問題(有誤差),但是如果縮放視窗、全螢幕、F12,之後看就又對了= =a)
總之,一個一勞永逸的方式就是~自己取得原圖片的原始大小Orz..
此外,自己取圖片的大小並設定還有一個好處就是~
順便解 chrome 在 jquery.load(xxx.html) image進來時,那些 image 的長寬都是0 的問題...
然後搞笑的是...在我的情況下,firefox ctrl+F5時,圖片自動會變 24px??!!!....
一般網路上給的資源大多是只取一個圖片的原始大小,
但在我的case裡,是要全部的圖片都一起 縮放~
就改寫了一下~
重點就是... new Image 來暫存要讀的圖檔~
在 image onload 事件 時,可以拿到他原始的長寬...
然後為了要觸發事件, 所以在寫完 onload 事件後,再去把 image 的 src 指向位置過去。
http://stackoverflow.com/questions/12354865/image-onload-event-and-browser-cache
var img = new Image();
img.onload = function () {
alert("image is loaded");
}
img.src = "img.jpg";
---------------------------------------------------------------
var myimgs = $('.myimg');
var tmpImg = [];
for(var i = 0 ; i < myimgs.length ; i++) {
....
tmpImg[i] = new Image(); tmpImg[i].alt = i; tmpImg[i].isload = '0'; tmpImg[i].onload = function() { var height = this.height; var width = this.width; $(myimgs[ this.alt ]).css('width', width); $(myimgs[this.alt]).css('width', Math.floor(parseInt(width)*imgscale)+'px'); tmpImg[this.alt].isload = '1'; //check if all image load ok?? var flag = true; for(var i = 0 ; i < tmpImg.length ; i++) { if ( tmpImg[i].isload == '0') { flag = false; break; } } if (flag) { ...... } } tmpImg[i].src = $(myimgs[i]).attr('src');
....
$(myimgs[i]).css('height', 'auto');
}
2015年11月24日 星期二
screen rotated on mobile and change background image
手機網頁,跨裝置的網頁,可以找一些 cross device 的 css framework...
搭配方塊排版的設計,就可以得到相當不錯的結果~
我覺得手機網頁最大的重點就是,好好的設定meta viewport
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1"/>
如果在意某些瀏覽器放大縮小會讓版面爛掉的話,就加上 user-scalable=0...
然後自己做個字型放大功能一.一b...
另外就手機有直式跟橫式的差別~~
(PC基本上都是橫式)
若背景是張圖片的話,然後....想要像APP那樣子,做個比較漂亮的轉換的話~
當然首先要有兩張圖~
ex: background_h.jpg(橫), background_v.jpg(直)
然後在 window.onresize (螢幕大小切換)
但~~直接改寫 window event 是件很可怕的事情~所以要用 event addEventListener 的方式實作較好~
參考網路上的資源修改成
var addEvent = function(object, type, callback) {
if (object == null || typeof(object) == 'undefined') return;
if (object.addEventListener) {
object.addEventListener(type, callback, false);
} else if (object.attachEvent) {
object.attachEvent("on" + type, callback);
} else {
object["on"+type] = callback;
}
};
addEvent(window, "resize", function(event) {
//check screen width and height
var oh = $(window).height();
var ow = $(window).width();
var sz = 'h';
if(oh > ow) {
sz = 'v';
}
$('.content').css('background', 'url(imgs/background_'+sz+'.jpg) no-repeat');
$('.content').css('background-position', 'center center');
$('.content').css('background-size', 'cover');
});
如果想要在轉換時,做個過場動畫...
可以用jquery 的 animate,但...因為圖是現load的,
在網路不穩的手機上~其實蠻讓人困擾的就是...
想想最簡單的方式,應該就是做一張大張的圖,直接符合橫,寬的版...
然後背景圖定位放在中間~
(缺點就是那張圖會很大張!還有一些美感的問題就是...)
搭配方塊排版的設計,就可以得到相當不錯的結果~
我覺得手機網頁最大的重點就是,好好的設定meta viewport
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1"/>
如果在意某些瀏覽器放大縮小會讓版面爛掉的話,就加上 user-scalable=0...
然後自己做個字型放大功能一.一b...
另外就手機有直式跟橫式的差別~~
(PC基本上都是橫式)
若背景是張圖片的話,然後....想要像APP那樣子,做個比較漂亮的轉換的話~
當然首先要有兩張圖~
ex: background_h.jpg(橫), background_v.jpg(直)
然後在 window.onresize (螢幕大小切換)
但~~直接改寫 window event 是件很可怕的事情~所以要用 event addEventListener 的方式實作較好~
參考網路上的資源修改成
var addEvent = function(object, type, callback) {
if (object == null || typeof(object) == 'undefined') return;
if (object.addEventListener) {
object.addEventListener(type, callback, false);
} else if (object.attachEvent) {
object.attachEvent("on" + type, callback);
} else {
object["on"+type] = callback;
}
};
addEvent(window, "resize", function(event) {
//check screen width and height
var oh = $(window).height();
var ow = $(window).width();
var sz = 'h';
if(oh > ow) {
sz = 'v';
}
$('.content').css('background', 'url(imgs/background_'+sz+'.jpg) no-repeat');
$('.content').css('background-position', 'center center');
$('.content').css('background-size', 'cover');
});
如果想要在轉換時,做個過場動畫...
可以用jquery 的 animate,但...因為圖是現load的,
在網路不穩的手機上~其實蠻讓人困擾的就是...
想想最簡單的方式,應該就是做一張大張的圖,直接符合橫,寬的版...
然後背景圖定位放在中間~
(缺點就是那張圖會很大張!還有一些美感的問題就是...)
2015年5月6日 星期三
jquery outerHight sometimes wrong
先來看這個這個 jquery method
https://api.jquery.com/outerHeight/
裡面有圖解他取的範圍~
原則上,一般大家都會取用 ex: $('#test').outerHeight(true),加上margin的計算~
不過,有時候他會出現很奇妙的數字...Google關鍵字也可以讓你找到不少人有一樣的問題。
但是,通常要用到這個method時,大多是計算位置,或是自動修正高度 scrollbar用,一但出現奇妙的數字就會非常Orz...
看了一下Google網路上說法,有時候是老IE的基本元件 padding/margin 本身 default就有問題,可以導入 reset.css 之類的解決。
不過我碰到的倒不是這樣子,但最後也是用改 版面的 css 來解決,我想會讓他出錯的,應該是某些特定 版面排版 設定造成的(並不是單一個div,而是整體的使用,導致他誤判或是什麼的吧,但不容易想到去調別人~所以發生時,一定會覺得很鬼XD...)
講一下在我出錯的case裡,基本結構是:
<div> <!-- margin here --> O -->
<table> <!-- margin here --> X -->
<thead>....</thead> <!-- here getOuterHight(true) -->
<tbody>....</tbody>
</table>
</div>
而我在抓 thead 的 高度時GG了~
outerHeight 明顯的數字變高,但是我在 thead 裡的 tr, th, td 等,其實都沒動到height/margin/padding 等項目...一整個搞不懂為啥他喵的旁邊的table算對,就是這一個算錯~
後來比了很久的source code,發現出錯的那個 table tag,有定了 margin/border...然後正覺得table的 上下margin,加起來的數字還跟多出來的高度很接近...果然拿掉 table的margin,計算後就正確了!
所以在結構上,整個table的外框與間隔,應該在外層再用一個div包起來,用div的外框與間隔來做比較好。table與table內的型態,就讓他單純點的不要搞太多設定會比較好~~
不過這表示說,outerHight這個method,可能也會受到 parent/child 等的影響,除了找該元件的內容外,相連的元件設定也該找找看,說不定會比較快找到鬼QQ~
https://api.jquery.com/outerHeight/
裡面有圖解他取的範圍~
原則上,一般大家都會取用 ex: $('#test').outerHeight(true),加上margin的計算~
不過,有時候他會出現很奇妙的數字...Google關鍵字也可以讓你找到不少人有一樣的問題。
但是,通常要用到這個method時,大多是計算位置,或是自動修正高度 scrollbar用,一但出現奇妙的數字就會非常Orz...
看了一下Google網路上說法,有時候是老IE的基本元件 padding/margin 本身 default就有問題,可以導入 reset.css 之類的解決。
不過我碰到的倒不是這樣子,但最後也是用改 版面的 css 來解決,我想會讓他出錯的,應該是某些特定 版面排版 設定造成的(並不是單一個div,而是整體的使用,導致他誤判或是什麼的吧,但不容易想到去調別人~所以發生時,一定會覺得很鬼XD...)
講一下在我出錯的case裡,基本結構是:
<div> <!-- margin here --> O -->
<table> <!-- margin here --> X -->
<thead>....</thead> <!-- here getOuterHight(true) -->
<tbody>....</tbody>
</table>
</div>
而我在抓 thead 的 高度時GG了~
outerHeight 明顯的數字變高,但是我在 thead 裡的 tr, th, td 等,其實都沒動到height/margin/padding 等項目...一整個搞不懂為啥他喵的旁邊的table算對,就是這一個算錯~
後來比了很久的source code,發現出錯的那個 table tag,有定了 margin/border...然後正覺得table的 上下margin,加起來的數字還跟多出來的高度很接近...果然拿掉 table的margin,計算後就正確了!
所以在結構上,整個table的外框與間隔,應該在外層再用一個div包起來,用div的外框與間隔來做比較好。table與table內的型態,就讓他單純點的不要搞太多設定會比較好~~
不過這表示說,outerHight這個method,可能也會受到 parent/child 等的影響,除了找該元件的內容外,相連的元件設定也該找找看,說不定會比較快找到鬼QQ~
2014年12月14日 星期日
jquery ui drag on android web browser
可能是因為觸控板的關係~
所以在pad的瀏覽器下~jquery的拖拉會有問題~
還好這時候~只要加入一隻修正就好了^O^b...
好心的stackoverflow
http://stackoverflow.com/questions/5796109/jquery-drag-and-drop-on-touch-devices-ipad-android
以及
http://touchpunch.furf.com/
所以在pad的瀏覽器下~jquery的拖拉會有問題~
還好這時候~只要加入一隻修正就好了^O^b...
好心的stackoverflow
http://stackoverflow.com/questions/5796109/jquery-drag-and-drop-on-touch-devices-ipad-android
以及
http://touchpunch.furf.com/
2012年6月15日 星期五
FB JS SDK-顯示粉絲團並檢查按讚
我也是現在才知道~原來在粉絲團按讚就等於加入粉絲團了!!
粉絲團內容+按讚使用like_box,
如果要跟網路上一樣精簡只有讚按紐可以用like_button
官網上這些被列入plugin, 還有預覽跟gen code很貼心!!
http://developers.facebook.com/docs/reference/plugins/like-box/
在送出page前check有沒有加入粉絲團一樣用FB.api...
此頁是接在之前登入APP後做的~ 所以能來到這的user是都已經登入過囉!!
---html/jsp include
<script src="http://connect.facebook.net/zh_TW/all.js"></script>
<div id="like_box" style="margin-top:5px;display:none">
<div class="fb-like-box" data-href="http://www.facebook.com/tyepb" data-width="300" data-show-faces="true" data-stream="false" data-header="false"></div>
</div>
---script/js file
FB.init({
appId: '{APP_ID}', // App ID
//channelURL: '....................', // Channel File
status: true, // check login status
cookie: true, // enable cookies to allow the server to access the session
oauth: false, // enable OAuth 2.0
xfbml: true // parse XFBML
});
function fan2() {
var pid = '{PAGE_ID}';
var isFan = false;
FB.api('/me/likes/'+pid,function(response) {
//console.log(response);
if( response.data ) {
if(response.data) {
for(var i = 0 ; i < response.data.length ; i++) {
if(pid == response.data[i].id) {
isFan = true;
//console.log('??it is fan!!');
//return true;
}
}
}
if(isFan) {
//do something when user like fans page
} else {
//do something when user unlike fans page
return false;
}
} else {
//user not login/or not connect FB APP
return false;
}
});
return false;
}
粉絲團內容+按讚使用like_box,
如果要跟網路上一樣精簡只有讚按紐可以用like_button
官網上這些被列入plugin, 還有預覽跟gen code很貼心!!
http://developers.facebook.com/docs/reference/plugins/like-box/
在送出page前check有沒有加入粉絲團一樣用FB.api...
此頁是接在之前登入APP後做的~ 所以能來到這的user是都已經登入過囉!!
---html/jsp include
<script src="http://connect.facebook.net/zh_TW/all.js"></script>
<div id="like_box" style="margin-top:5px;display:none">
<div class="fb-like-box" data-href="http://www.facebook.com/tyepb" data-width="300" data-show-faces="true" data-stream="false" data-header="false"></div>
</div>
---script/js file
FB.init({
appId: '{APP_ID}', // App ID
//channelURL: '....................', // Channel File
status: true, // check login status
cookie: true, // enable cookies to allow the server to access the session
oauth: false, // enable OAuth 2.0
xfbml: true // parse XFBML
});
function fan2() {
var pid = '{PAGE_ID}';
var isFan = false;
FB.api('/me/likes/'+pid,function(response) {
//console.log(response);
if( response.data ) {
if(response.data) {
for(var i = 0 ; i < response.data.length ; i++) {
if(pid == response.data[i].id) {
isFan = true;
//console.log('??it is fan!!');
//return true;
}
}
}
if(isFan) {
//do something when user like fans page
} else {
//do something when user unlike fans page
return false;
}
} else {
//user not login/or not connect FB APP
return false;
}
});
return false;
}
FB JS SDK-使用者登入FB APP
不知道是不是閏月的關係~ 最近真是太血淚了Orz..
在Java Base, FB沒有特製的SDK, 就只能用JS SDK
主要有Issue要判斷~ facebook的user是不是某某粉絲團的粉絲~
所以要先弄一個FB APP去access使用者資訊..
而如何讓使用者登入FB APP並同意隱私權授權..
不換頁~ 直接在同一頁登入..
在官網的範例有很不錯的範例~ 我只是把另開改成在原本頁面處理...
FB.api + oauth dialogs
http://developers.facebook.com/docs/reference/dialogs/oauth/
---html/jsp include FB js lib
<script src="http://connect.facebook.net/zh_TW/all.js"></script>
---js script/file
FB.init({
appId: '{APP_ID}', // App ID
//channelURL: '....................', // Channel File
status: true, // check login status
cookie: true, // enable cookies to allow the server to access the session
oauth: false, // enable OAuth 2.0
xfbml: true // parse XFBML
});
function loginUser() {
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
//login and permit APP access before
var uid = response.authResponse.userID;
var accessToken = response.authResponse.accessToken;
//do something when user login FB APP ok
$('#like_box').css('display', 'block');
} else if (response.status === 'not_authorized') {
//login but not access app
doLoginApp2();
} else {
// the user isn't logged in to Facebook.
doLoginApp2();
}
}, true);
}
function doLoginApp2() {
var appID = '{APP_ID}';
var path = 'https://www.facebook.com/dialog/oauth?';
//on moblie, display=touch
var queryParams = ['client_id=' + appID, 'redirect_uri=' + window.location, 'response_type=token', 'display=touch'];
//on PC web
//var queryParams = ['client_id=' + appID, 'redirect_uri=' + window.location, 'response_type=token'];
var query = queryParams.join('&');
var url = path + query;
window.location = url;
}
在Java Base, FB沒有特製的SDK, 就只能用JS SDK
主要有Issue要判斷~ facebook的user是不是某某粉絲團的粉絲~
所以要先弄一個FB APP去access使用者資訊..
而如何讓使用者登入FB APP並同意隱私權授權..
不換頁~ 直接在同一頁登入..
在官網的範例有很不錯的範例~ 我只是把另開改成在原本頁面處理...
FB.api + oauth dialogs
http://developers.facebook.com/docs/reference/dialogs/oauth/
---html/jsp include FB js lib
<script src="http://connect.facebook.net/zh_TW/all.js"></script>
---js script/file
FB.init({
appId: '{APP_ID}', // App ID
//channelURL: '....................', // Channel File
status: true, // check login status
cookie: true, // enable cookies to allow the server to access the session
oauth: false, // enable OAuth 2.0
xfbml: true // parse XFBML
});
function loginUser() {
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
//login and permit APP access before
var uid = response.authResponse.userID;
var accessToken = response.authResponse.accessToken;
//do something when user login FB APP ok
$('#like_box').css('display', 'block');
} else if (response.status === 'not_authorized') {
//login but not access app
doLoginApp2();
} else {
// the user isn't logged in to Facebook.
doLoginApp2();
}
}, true);
}
function doLoginApp2() {
var appID = '{APP_ID}';
var path = 'https://www.facebook.com/dialog/oauth?';
//on moblie, display=touch
var queryParams = ['client_id=' + appID, 'redirect_uri=' + window.location, 'response_type=token', 'display=touch'];
//on PC web
//var queryParams = ['client_id=' + appID, 'redirect_uri=' + window.location, 'response_type=token'];
var query = queryParams.join('&');
var url = path + query;
window.location = url;
}
2011年8月15日 星期一
[CSS]下拉選單被google map檔住
標題說真的有點長~
發生的情況還要幾個先決條件~
drop down menu(float) + google map + IE
反正又是萬惡IE啦~~
解法當然首先要設定z-index..
float的 ul style="z-index:100"(反正要大)
google map的 div style="z-index:1"(比上面的小)
但是在某些情況下IE還是會被地圖擋住..
這時候要檢查css裡面的 position
IE下z-index要正常運作的一個前題是position:absolute..
所以如果這兩個地方如果有一個不是~ 很可能就不會作用..
發生的情況還要幾個先決條件~
drop down menu(float) + google map + IE
反正又是萬惡IE啦~~
解法當然首先要設定z-index..
float的 ul style="z-index:100"(反正要大)
google map的 div style="z-index:1"(比上面的小)
但是在某些情況下IE還是會被地圖擋住..
這時候要檢查css裡面的 position
IE下z-index要正常運作的一個前題是position:absolute..
所以如果這兩個地方如果有一個不是~ 很可能就不會作用..
2011年8月11日 星期四
[CSS]排版置中
超久沒更新~ 最近來更新一些最近的心得QQ
萬惡的IE版都排不好~~為了在寬螢幕置中
align=center是不夠低, 那就加上這個吧~
body
{
_text-align:center;
}
#main
{
width:1024px;
margin:0 auto;
_text-align:left;
}
萬惡的IE版都排不好~~為了在寬螢幕置中
align=center是不夠低, 那就加上這個吧~
body
{
_text-align:center;
}
#main
{
width:1024px;
margin:0 auto;
_text-align:left;
}
2009年10月29日 星期四
[HTML]img下的邊線
感謝一位只會table的美工...
CSS真的是沒有這麼的突飛猛進過一_一|||...
不過很多原因跟本都是IE跟FF~ 一個吃一個不吃~
唉...真是會給他昏倒...
調到最後終於剩下莫名其妙的圖片底下有一條線...
還好google大神幫偶找到了這個Q_Q...
http://www.fming.cn/chengxu/44.htm
我只能說這位仁兄你解決了偶N個疑問Orz...
就只要很簡單的設定font-size:0...T^T...感動阿~
CSS真的是沒有這麼的突飛猛進過一_一|||...
不過很多原因跟本都是IE跟FF~ 一個吃一個不吃~
唉...真是會給他昏倒...
調到最後終於剩下莫名其妙的圖片底下有一條線...
還好google大神幫偶找到了這個Q_Q...
http://www.fming.cn/chengxu/44.htm
我只能說這位仁兄你解決了偶N個疑問Orz...
就只要很簡單的設定font-size:0...T^T...感動阿~
2009年7月28日 星期二
[Javascript] 詭異的IE6 href 換頁
話說~ ie6真是萬惡的淵藪.. 這個問題卡了整整兩天Orz..
原文是降子低~
< a href="javascript:void(0);" onclick="submitForm('Insert');">新增使用者< / a>
看起來一點問題都沒有=_=a..firefox也很正常..就這個link搞了很久居然都不動..
本來以為是沒有call到submit..可是jsp log也說跑了後面的頁面流程了...
就是該死的網頁沒換成下一頁~ 一度懷疑過struts, html onload..最後只能懷疑到這...擺明沒錯的東西了!!(這個用法寫了n百次, 都沒出過事, 怎麼會這麼怪一"一?)
後來改成...
< a href="#" onclick="submitForm('Insert');">新增使用者< / a>
Ohya...能動了..但是#會跳去網址列很醜阿Q_Q...
這時候請出貴公司的javascript大師解惑..
原來..在瀏覽器上, href的行為, 其實就等於是onclick 動作..所以有href沒click不會有事...
相當於這樣..
< a href="submitForm('Insert');" >新增使用者< / a>
但是這樣會把js function直接show在底下的status bar..比較不安全跟不好看...
但是當兩個同時存在時..則會執行onclick, 又執行href..就變成最後的結果是void(0);<---什麼都不做了Orz...
所以要怎麼搞才有最完美的解.. 就是在onclick最後加上return false;!!
< a href="javascript:void(0);" onclick="submitForm('Insert');return false;">新增使用者< / a>
這樣可以強迫瀏覽器在onclick事情做玩後跳掉..就不會跑到href了~
或者在submitForm function裡面的最後return false也可以..
但是要記得~ 只有return false有用...return true..href還是會執行的O.O/
原文是降子低~
< a href="javascript:void(0);" onclick="submitForm('Insert');">新增使用者< / a>
看起來一點問題都沒有=_=a..firefox也很正常..就這個link搞了很久居然都不動..
本來以為是沒有call到submit..可是jsp log也說跑了後面的頁面流程了...
就是該死的網頁沒換成下一頁~ 一度懷疑過struts, html onload..最後只能懷疑到這...擺明沒錯的東西了!!(這個用法寫了n百次, 都沒出過事, 怎麼會這麼怪一"一?)
後來改成...
< a href="#" onclick="submitForm('Insert');">新增使用者< / a>
Ohya...能動了..但是#會跳去網址列很醜阿Q_Q...
這時候請出貴公司的javascript大師解惑..
原來..在瀏覽器上, href的行為, 其實就等於是onclick 動作..所以有href沒click不會有事...
相當於這樣..
< a href="submitForm('Insert');" >新增使用者< / a>
但是這樣會把js function直接show在底下的status bar..比較不安全跟不好看...
但是當兩個同時存在時..則會執行onclick, 又執行href..就變成最後的結果是void(0);<---什麼都不做了Orz...
所以要怎麼搞才有最完美的解.. 就是在onclick最後加上return false;!!
< a href="javascript:void(0);" onclick="submitForm('Insert');return false;">新增使用者< / a>
這樣可以強迫瀏覽器在onclick事情做玩後跳掉..就不會跑到href了~
或者在submitForm function裡面的最後return false也可以..
但是要記得~ 只有return false有用...return true..href還是會執行的O.O/
2008年10月22日 星期三
[Javascript]快速建立物件屬性
最近有需要用到很大量的Javascript, 但是原本都只會一個var等於一個值...
想說要是如果能把他當物件使用就好了...
這個是後來集合最快給值的寫法XD:
(其實有一些是用了json之後才發現原來javascript可以這樣子寫O.Oa)
var items=[]; // equals var items=new Array();
items[0]={name:'剪刀',type:'文具',price:150};
items[1]={name:'訂書機',type:'文具',price:200};
以此類推...
取值就可以用:
items[0].name
items[0].type
items[0].price
另外如果是要快速建立已經定好的物件, 可以用這個方式
var item1 = new Item({name:'原子筆',type:'文具',price:25});
想說要是如果能把他當物件使用就好了...
這個是後來集合最快給值的寫法XD:
(其實有一些是用了json之後才發現原來javascript可以這樣子寫O.Oa)
var items=[]; // equals var items=new Array();
items[0]={name:'剪刀',type:'文具',price:150};
items[1]={name:'訂書機',type:'文具',price:200};
以此類推...
取值就可以用:
items[0].name
items[0].type
items[0].price
另外如果是要快速建立已經定好的物件, 可以用這個方式
var item1 = new Item({name:'原子筆',type:'文具',price:25});
2008年8月6日 星期三
[Javascript]判別是否用IE瀏覽器
現在就IE跟FF為大宗...
雖然有個標準在...不過反正兩個沒事就在那邊偷吃步一下支援一下不支援...
每次都還要量身定做=_=|||...
function isIE() {
var b =navigator.appName;
if(b != "Microsoft Internet Explorer") {
return false;
} else {
return true;
}
}
習慣上就IE...不是IE就當FF跑...
補充如果在IE上才用b.js 的include寫法(補破洞專用的js寫用=.=)
< !--[if IE]>
< script type="text/javascript" src="./b.js">< /script>
< ![endif]-->
雖然有個標準在...不過反正兩個沒事就在那邊偷吃步一下支援一下不支援...
每次都還要量身定做=_=|||...
function isIE() {
var b =navigator.appName;
if(b != "Microsoft Internet Explorer") {
return false;
} else {
return true;
}
}
習慣上就IE...不是IE就當FF跑...
補充如果在IE上才用b.js 的include寫法(補破洞專用的js寫用=.=)
< !--[if IE]>
< script type="text/javascript" src="./b.js">< /script>
< ![endif]-->
[Javascript]取得網址列參數
平常jsp寫習慣了...拿個參數都是request.getParamter("ooxx");
簡單易懂又好拿...
不過覺得麻煩的是要嵌jsp的一堆東西...
有次偷懶只寫了html, 後來發現要接參數..又懶得把他改成jsp...
就從google大神問到了javascript取得網址列參數的用法...
不過我想...post method可能拿不到吧~
function getQuery(name) {
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = location.search.substr(1).match(reg);
if (r!=null) return unescape(r[2]); return null;
}
應用上:
var id = getQuery("id");
等同於:
var id = <%=request.getParamter("id")%>
簡單易懂又好拿...
不過覺得麻煩的是要嵌jsp的一堆東西...
有次偷懶只寫了html, 後來發現要接參數..又懶得把他改成jsp...
就從google大神問到了javascript取得網址列參數的用法...
不過我想...post method可能拿不到吧~
function getQuery(name) {
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = location.search.substr(1).match(reg);
if (r!=null) return unescape(r[2]); return null;
}
應用上:
var id = getQuery("id");
等同於:
var id = <%=request.getParamter("id")%>
[Javascript]圖片無法顯示使用其他圖片
這個問題的起源是因為...
因為有要上傳圖檔到server上預覽...
但是因為有很無聊的上一步, 下一步流程...
搞不懂圖現在是在temp區還是正式區了...
用個js小撇步
< IMG id="preview_pic" ALT="" src="'+imgPath+'" >
document.getElementById('preview_pic').onerror = function(){
this.src = document.getElementById('imgPath2').value;
};
因為有要上傳圖檔到server上預覽...
但是因為有很無聊的上一步, 下一步流程...
搞不懂圖現在是在temp區還是正式區了...
用個js小撇步
< IMG id="preview_pic" ALT="" src="'+imgPath+'" >
document.getElementById('preview_pic').onerror = function(){
this.src = document.getElementById('imgPath2').value;
};
2008年6月17日 星期二
[JavaScript]完整保存TextArea的文字
這個主要是在textarea內給人填html語法, submit過後好幾頁還需要預覽那個html語法...
因為裡面會有換行, <>, ", ', \, 這堆跳脫字元...
要去加字也不對...
因為之後直接取出來不能用...
後來有Javascript大師提供的...偷吃步XD"...
提示: 用div包起來, 不要顯示
< div id="noDisplay" style="display:none">
<%out.print(session.getAttribute("html_text"));%>
< /div>
javascript:
document.getElementById('preview').innerHTML = document.getElementById('noDisplay').innerHTML;
\囧/ 想一想這個真是有夠神奇的偷吃步...
因為裡面會有換行, <>, ", ', \, 這堆跳脫字元...
要去加字也不對...
因為之後直接取出來不能用...
後來有Javascript大師提供的...偷吃步XD"...
提示: 用div包起來, 不要顯示
< div id="noDisplay" style="display:none">
<%out.print(session.getAttribute("html_text"));%>
< /div>
javascript:
document.getElementById('preview').innerHTML = document.getElementById('noDisplay').innerHTML;
\囧/ 想一想這個真是有夠神奇的偷吃步...
2008年1月22日 星期二
[Javacript]讀取解xml資料
這是算用IE/FireFox裡內建讀xml資料的方法...
(網路上老是只貼一半, google大神問了好幾次XD)
跨兩個瀏覽器ok的寫法...
IE跟FireFox兩個讀xml的function跟後來取node的方式都不一樣...所以還是得分開寫
另外xml load進來的時間有點慢, 若是xml檔太大...有時後還沒load完...
items還沒建完, 就會有點怪怪的...
所以建議是...load xml最好是能寫在最前面, 讓程式有足夠的時間去load
我的偷吃步是寫死一個default的item[0]...所以才會看到從i+1開始算XD...
反正總是剛開啟用default值跑就夠了^_^!
另外同事是說...也可以用ajax去out print一個xml出來讀也是可以啦...
不過ajax要另外寫一隻...就又懶惰了一_一|||
還有用這個方法的話, 瀏覽器會暫存住資訊...所以發現要是改了xml資訊...
發現程式沒有做對應的變動...記得去清一下暫存資訊/表單資訊應該就可以了~
(差點被FireFox嚇死XD)
blog不能吃 < 緊連的字XD...又試了老半天...空一格就好了QQ
var xmlDoc;
var items = new Array();
function init() {
if(document.implementation.createDocument) {
xmlDoc = document.implementation.createDocument('', '', null);
xmlDoc.load("./aabbcc.xml");
xmlDoc.onload = function(){itemFireFoxSetting();}
} else {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("./aabbcc.xml");
itemIESetting();
}
}
function itemFireFoxSetting() {
var ads = xmlDoc.getElementsByTagName('item');
/*
< item >
< id >A11< / id >
< /item >
*/
//alert(ads.length);
for(var i=0; i < ads.length; i++) {
var tmp = new Array();
tmp[0] = ads[i].getElementsByTagName('id')[0].firstChild.nodeValue;
items[i+1] = tmp;
//alert(tmp[0]);
}
}
function itemIESetting() {
var ads = xmlDoc.documentElement.selectNodes('item');
for(var i=0; i < ads.length; i++) {
var tmp = new Array();
tmp[0] = ads[i].getElementsByTagName('id')[0].firstChild.nodeValue;
items[i+1] = tmp;
//alert(tmp[0]);
}
}
(網路上老是只貼一半, google大神問了好幾次XD)
跨兩個瀏覽器ok的寫法...
IE跟FireFox兩個讀xml的function跟後來取node的方式都不一樣...所以還是得分開寫
另外xml load進來的時間有點慢, 若是xml檔太大...有時後還沒load完...
items還沒建完, 就會有點怪怪的...
所以建議是...load xml最好是能寫在最前面, 讓程式有足夠的時間去load
我的偷吃步是寫死一個default的item[0]...所以才會看到從i+1開始算XD...
反正總是剛開啟用default值跑就夠了^_^!
另外同事是說...也可以用ajax去out print一個xml出來讀也是可以啦...
不過ajax要另外寫一隻...就又懶惰了一_一|||
還有用這個方法的話, 瀏覽器會暫存住資訊...所以發現要是改了xml資訊...
發現程式沒有做對應的變動...記得去清一下暫存資訊/表單資訊應該就可以了~
(差點被FireFox嚇死XD)
blog不能吃 < 緊連的字XD...又試了老半天...空一格就好了QQ
var xmlDoc;
var items = new Array();
function init() {
if(document.implementation.createDocument) {
xmlDoc = document.implementation.createDocument('', '', null);
xmlDoc.load("./aabbcc.xml");
xmlDoc.onload = function(){itemFireFoxSetting();}
} else {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("./aabbcc.xml");
itemIESetting();
}
}
function itemFireFoxSetting() {
var ads = xmlDoc.getElementsByTagName('item');
/*
< item >
< id >A11< / id >
< /item >
*/
//alert(ads.length);
for(var i=0; i < ads.length; i++) {
var tmp = new Array();
tmp[0] = ads[i].getElementsByTagName('id')[0].firstChild.nodeValue;
items[i+1] = tmp;
//alert(tmp[0]);
}
}
function itemIESetting() {
var ads = xmlDoc.documentElement.selectNodes('item');
for(var i=0; i < ads.length; i++) {
var tmp = new Array();
tmp[0] = ads[i].getElementsByTagName('id')[0].firstChild.nodeValue;
items[i+1] = tmp;
//alert(tmp[0]);
}
}
訂閱:
文章 (Atom)