[JS] tinyMCE – 利用AJAX動態加載的時候,會自動渲染textarea


在jQuery 使用外掛套件jeditable的時候會動態生成 。

但是動態生成的 並不會被 tinyMCE所渲染,

這時候只要配合這個指令: tinyMCE.execCommand('mceAddControl', true, 'my');

如果動作重複想要再一次渲染,那將會沒有反應。

所以要配合: tinyMCE.execCommand('mceRemoveControl', true, 'my');

所以最好用在動態新增刪除<textarea>的時候,JQ的動作要先mceRemoveControl再mceAddControl。
(移除綁定在增加綁定的概念)
例如

$("body").on("click", ".edit textarea", function (){
    var $this    = $(this);
    var addid    = $this.parents(".edit").attr("data-jcol");
    var add    = "add_tinyMCE_" + addid;
    $this.attr("id", add);

    tinyMCE.execCommand('mceRemoveControl', true, add);
    tinyMCE.execCommand('mceAddControl', true, add);
    }); 
 
就可以在指定的 進行重新選染成編輯器了。

*參考官方英文文件http://www.tinymce.com/wiki.php/Command_identifiers

[jQ] 外掛Jeditable 的用法

這個套件是用來即時編輯,使用者要輸入的資料量不大的時候用這個效果不錯。

但都忘記怎麼用,這裡記錄一下….

/*長相 1 */

    $(".edit").editable(
'<?=_JS_BASEURL?>admin/BackEnd/fame/bp.php',{
submit : '儲存',
cancel : '取消',
indicator : '儲存中…',
onblur : 'ignore',
submitdata : function(value, settings) {
return    { 
act     : 'query_update',
id : $(this).parents("tr").find(".box").val(),
column    : $(this).attr("data-id") //要修的欄位
};
}
});


/*長相2 */

$(".isopen").editable(
'<?=_JS_BASEURL?>admin/BackEnd/member/bp.php',
{
tooltip   :    '變更該帳號狀態',
type :    'select',
'submit' :    '儲存',
cancel :    '取消', 
indicator :    '儲存中…',
onblur :    'ignore',
data :    {
'0'    :    '關閉',
'1' :    '開放'
},
'submitdata'    :    function(value, settings) {
      return    { 
act     : 'saveisopen', 
mbid     : $(this).attr("data-id")
};
}
}
);

 

    
/*

 submitdata 用來傳送的資料,方法比較特殊,須要用return { } 的方法來包資料
*/


其他參考官網 http://www.appelsiini.net/projects/jeditable
 


 

[jQuery][PHP] 利用 fancybox 或AJAX 傳送表單前加密,到PHP後進行驗證

 

<?############################## test.php #######################################
 
session_start();
    
/*
 * 說明:
 *
 * 一般都是利用<form>傳送整頁後再進行php check的動作,
 * 但有時候需要做比較花俏的特效來增加網頁效果阿,
 * 像是配合jquery 的外掛 fancybox 來 ajax 送表單~
 * 
 * 例:使用者點送出表單 -> 彈出驗證的結果
 * 
 * 這種透過AJAX的方法,就可以做到不用換整頁囉。當然程式碼也就變更麻煩而且更多了
 *
 * 但是需要注意,最好加上驗證碼避免黑客攻擊:
     -1.加入一個hash, 用來讓PHP判斷資料有沒有在傳輸途中被串改
    -2.註冊PHP的session,讓PHP check的時候知道是由自己的伺服器發送表單來到此頁
       用意是避免黑客在他的電腦做一個一模一樣的form,然後丟到我們的test.php頁面來check。
       
*/    
    

// 1.定義一個密碼,固定時間要變一下,避免黑客長期監視找出規則
define('HASH', 'rhjefrue8934');

// 2.首先在伺服器註冊一個加密的SESSION 時間戳記 
// (基本上session因為註冊在伺服器,安全度比 cookie高了。這樣做其實只是自認為會更安全一點)
$_SESSION['stamp'] = hash('sha512', HASH . date("YmdHis") . HASH);

    
    
    
    
?>

<script src="require/tools/jquery.js"></script>
<script src="require/tools/jquery.md5.js"></script>

<script>
    $(function (){

//3.表單送出前
$(".form1").live("submit", function (){

//把使用者輸入的<input>變成query字串
var data_string = $("input").serialize();

//把變數串起來用jQuery的外掛md5加密(也可以用其他的如sha512啦…)
//這裡舉例的規則是: (jquery 取得的input serialize後 + 時間戳記 + 自訂的密碼) 串在一起後用md5加密
var hash_string = $.md5( data_string + '<?=$_SESSION['stamp'] . HASH?>') 


//4.AJAX ,利用POST方法
$.post(
"test2.php", 
{
action     : 'check',
data    : data_string,
hash    : hash_string
},
function (data){

//我這裡是用alert範例,可以用fancybox彈跳出來會更好~
alert(data);

//若用fancybox就是這樣:
//$.fancybox(data);

}
);


//5.結尾記得要return false 不然整頁就送出去了
return false;
})
})
</script>

<meta charset="utf-8">
<form class="form1" method="post" action="">
    <input name="english" type="text" value="This is Englist" >
    <input name="chinese" type="text" value="這是中文" >
    <input name="submit" class="submit" type="submit" value="試試看吧" >
</form>

<?
############################## test2.php ############################################

 

session_start();
define('HASH', 'rhjefrue8934');

if ($_POST['action'] == "check") {
    
    //驗證資料正確嗎
    if ($_POST['hash'] == md5($_POST['data'].$_SESSION['stamp'].HASH)) echo "驗證碼正確!";
    else die("資料比對錯誤囉!");
    
    
    //分析傳來的query字串並自動預設命名
    parse_str($_POST['data']);
    
    
    die("您輸入的是{$english}與{$chinese}");
    }

?>

Facebook – 點選 like box 或 like button 後(也就是點讚以後)執行的動作

因為網站上的文章須有設置 facebook 讚 (或是推薦、like button、粉絲團的like box….) 的功能,
須要在使用者點選讚之後,執行一些jquery程式碼,或是AJAX 紀錄數據的一些動作,
弄了很久跟請教後才發現,
原來使用FB.Event.subscribe 就能夠輕鬆做到。

 

不過前提是你的 「讚」阿,
似乎須要是<div>而不能使用<iframe>,
因為<iframe>並不能被javascript取得觸發的事件喔

 

範例如下:

<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>

    FB.init({
//每次使用API都要先放這個,這裡就不多說了
appId: '<?=_FB_APPID?>', // 你的 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
});



    //主要是利用    FB.Event.subscribe 來偵測使用者點選like box、like button (讚) 或是粉絲團讚 以後的動作!
    //當然可以配合偵測使用者是否已經登入來延展更完善的功能,例如FB.getLoginStatus ,有興趣的朋友再找找看    FB.Event.subscribe('edge.create',
function(response) {
//這裡就能放要執行的JS囉
alert('您點選的網址: ' + response);
}
    );
</script>

PHP – 在 input 輸入空白或0時提供SQL的判斷方法 ( isset 與 empty 的問題)

<?
/*
    
    <<判斷input 輸入的數字>>
    
    當我們用SQL判斷區間時,例如
    「select * 
     from table 
     where id between '$start' and '$end' 」
    這種時候,如果使用者在<input name="start">打0
    那麼POST接收時單純用isset 或 empty 判斷都會有問題。如下所示:
    
    —- 1.用isset()的問題—-
    在<input name="start"> 打 0
    PHP判斷時用
    if (!empty($_POST['start'])) {
//執行一些內容….
}
    那麼這樣是無法執行內容的。因為打0在empty($_POST['start'])會得到true
    這會導致使用者明明打0,但程式無法執行!
    
    —- 2.用empty()的問題—-
    在<input name="start"> 打 0
    PHP判斷時用
    if (isset($_POST['start'])) {
//執行一些內容….
}
    對照上面的例子,這樣確實是可以執行內容的;但如果在<input name="start"> 保持空白什麼也不打
    PHP用isset($_POST['start'])判斷可是會得到TRUE喔!
    因為空白在isset()的語意上來說,空白也是被設定過的,當然為真!
    
    
    解決目標!
    當使用者在    
    <input>中不輸入文字    => PHP不執行;
    <input>中輸入空白    => PHP不執行;
    <input>輸入0 => PHP要執行
    
    
    演示如下:
 
*/

if (isset($_POST['OK'])) {
    $start = $_POST['start'];
    $end = $_POST['end'];
    
    //1.先去除前後的空白
    $start    = trim($start);
    $end    = trim($end);
    
    //2.判斷等不等於 "" 囉
    if ($start != "" and $end != "") {

//接著此處可以放一些你可能會想要過濾掉的程式碼,
//例如判斷若輸入字串就出現警告啦,輸入空白出現警告啦之類的,
//我在此就先不理這些,全部字串當成數字處理,所以直接跳到3.

//3.強制轉換為數字型態
$start     = (int)$start;
$end    = (int)$end;



//最後利用SQL語言查詢,就能符合我們的人類邏輯了,echo 看看吧!
echo $SQL = "select * from table where id between '$start' and '$end' ";

}
    else echo "請輸入數字區間!";
    }
    
    
?>
<form method="post" action=""> 
    <div>請輸入要查詢的區間:</div>
    <div>開始:<input name="start" type="text" value=""></div>
    <div>結束:<input name="end" type="text" value=""></div>
    <input name="OK" type="submit" value="查詢">
</form>