2011年7月29日 星期五

心得 Youtube 等 flash 檔案遮住 css 下拉式選單

  使用下拉式選單,若下面有嵌入 flash 的話 使用一般的 object, embed 標籤下的話 ( youtube 中 影片右鍵可以 '複製嵌入程式碼') , 則youtube 的影片在網站上的就會顯示在最上層

若要避免這種情況的話,可以使用 swf object 來必面這個問題

[1] 有引用swf範例code 如下


<script type="text/javascript" src="swfobject.js"></script>
<div id="ytapiplayer">
You need Flash player 8+ and JavaScript enabled to view this video.
</div>

<script type="text/javascript">

var params = { allowScriptAccess: "always" };
var atts = { id: "myytplayer" };
swfobject.embedSWF("http://www.youtube.com/e/VIDEO_ID?enablejsapi=1&playerapiid=ytplayer",
"ytapiplayer", "425", "356", "8", null, null, params, atts);

</script>




VIDEO_ID 是上傳youtube , youtube 給的 ID , 可以從連結影片的路徑中


找到





[2] 中有提到 在 params 中 加入 wmode: "transparent" 參數設定可以解決這個問題

修正後的 變數如下,在此我順便設定了允許全螢幕的選項:


var params = { allowScriptAccess: "always" , allowFullScreen: 'true' , wmode: "transparent"};






詳細 的 params 變數可以參考[3].

參考:
[1]: YouTube API and Tools
[2]: Clayliao.f2e , 解決Flash 遮住 javascript 的小技巧
[3]: swf document

2011年7月28日 星期四

心得 Google Search API

    Google Search api 改版後,現在可以分成 個人 或商用的 ,最顯著的差異就是 商用不會有廣告,但要付錢, 申請的方式也是和google 帳號綁在一起,
  Sites to search: 的地方 可以所定要查詢的網站名稱

 設定完之後會給 javascript 和 css 檔 複製到網頁上就可以使用


  此外, [2] 中也提供了相關API 的定義,像 .execute(query)  就是 查詢query 的字串




參考:
[1] : Google Custom Search
[2] : Google Custom Search Element

2011年7月26日 星期二

2011年7月18日 星期一

轉貼 google app engine enhancer error 解決方式

原因可能是google 沒有將一些class enhancer 起來, 不過搜尋後找到一個解法 就是


設定 eclipse 的 ORM 的 path(Project Settings -> Google -> App Engine -> ORM) , 手動引用使用到的class


如圖:
















2011年7月5日 星期二

心得 Google app engine deletePersistentAll

JDO 中,可以利用 deletePersistentAll 來刪除符合條件的資料


例如.

javax.jdo.Query query = pm.newQuery(Person.class);
query.setFilter("height > 100");
query.deletePersistentAll();




不過若因為符合資料太多 則會造成 java.lang.OutOfMemoryError: Java heap space 的錯誤(heap 空間不夠),

可以考慮其他方式, 因為 google app enigne 的查詢只允許 1 個範圍的過濾查詢[2], 目前想到的方式是用order 後 取出前幾位,之後在將每個屬性判斷否符合條件在刪除, 用起來還真不方便....







參考

2011年7月4日 星期一

心得 jquery 動態新增欄位

參考以下的來源 利用 jquery 達成動態的新增移除 text欄位





以下是 code:






<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=BIG5">
<title>Test Jquery dyamic</title>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("jquery", "1.4.4");



function AddItem() {

document.getElementById('newitems').innerHTML +=

"<div class=\"rowElem\" >"+
"<label> ITEM ID: </label>"+
"<input name=\"serid\" id=\"serid\" type=\"text\" maxlength=\"11\"/>"+
"<input type=\"button\" value=\"add\" onclick=\"AddItem()\" /> "+
"<input type=\"button\" value=\"delete\" onclick=\"DeleteItem()\"/>"+
"</div>";



// 先抓到是哪一個 tr
var sids= $('input:button', '#reg');

if(sids.length<4){
var _count= sids.length-3;
sids.eq(_count).hide();
}
else{
var _count= sids.length-3;
sids.eq(_count-1).hide();
sids.eq(_count).hide();
}


}


function DeleteItem() {

// 先抓到是哪一個 tr
var txts= $('input:text', '#reg');

var _count= txts.length-1;
// 移除它
var rownow = txts.eq(_count).parent();
rownow.remove();




// BTN 顯示先前的
var btns= $('input:button', '#reg');

var _bcount= btns.length-1;
if(_bcount==0){
btns.eq(_bcount).show();
}
else{
btns.eq(_bcount-1).show();
btns.eq(_bcount).show();
}

}

function check(){

var txts= $('input:text', '#reg');
var _count= txts.length;
var _str ="";
for (var i=0;i< _count; i++){
_str = _str +i + ": " + txts.eq(i).val()+" ";
}

alert(_str);
}




</script>
</head>
<body>


<div id ="fromBody" >
<form id ="reg" method="post" action="#" ">


<div class="rowElem">
<label> ITEM ID: </label>
<input name="serid" id="serid" type="text" maxlength="11"/>
<input type="button" id="additem" value="add" onclick="AddItem()" />
</div>

<div id = "newitems">

</div>

<div class="rowElem">
<input type="submit" value="Send" onclick="check()"/>
</div>

</form>


</body>
</html>










注意 落利用他的jquery plugin 要注意 DOM的資料結構會變動,如圖使用 jqTransform