2013年8月29日 星期四

我的 Vim 指令筆記

Gist url : 我的 Vim 指令筆記 (markdown文檔)

vim 的三種模式

模式

  • 輸入模式:輸入內文。
  • 指揮模式:也叫指令模式,主要是進入到可以對文件做修改,複製,剪下貼上,游標移動等動作。
  • 執行模式:文件存檔,離開等等行為。

常用模式的切換

  • 輸入模式 -> 指揮模式 : 鍵盤 Esc
  • 指揮模式 -> 輸入模式 : 鍵盤 i, a, o
  • 指揮模式 -> 執行模式 : 鍵盤 :

如何進入 vim 編輯器

  • 指令 vim 本身就可以開啓 vim 編輯器,跳出請先到執行模式再按 q(:q) 然後 Enter 鍵。
  • 指令 vim 檔名 可開啓某檔案。

如何離開 vim

  • :q : 直接離開(在文件沒有被編輯過的情況下可以用)。
  • :q! : 強制離開(不儲存你的修改強制離開)。
  • :wq : 儲存並離開 (wq順序不能反)。
  • :x : 儲存並離開。

進入輸入模式的幾個方式

  • Append:
    • a: 游標前插入文字。
    • A: 游標移到此行最後一個字元。
  • Insert:
    • i: 游標後插入文字。
    • I: 游標移到此行第一個字元。
  • Open a new line:
    • o: 游標所在的那一行,向下插入新的一行。
    • O: 游標所在的那一行,向上插入新的一行。

指揮模式下的常用指令(注意大小寫有別)

  • 針對現在畫面跳到上中下區域:
    • H : 跳到畫面上面。
    • M : 跳到畫面中間。
    • L : 跳到畫面下方。
  • 上下左右移動:
    • h : 往左移動。
    • j : 往下移動。
    • k : 往上移動。
    • l : 往右移動。
    • 數字 + [h, j, k ,l] : 往左,下,右,上移動幾個字元。
  • gg : 跳到第一行。
  • G : 跳到最後一行。
  • 數字 + gg : 跳到該數字那一行。
  • 數字 + G : 跳到該數字那一行。
  • b : 移動到上一個字的第一個字元。
  • w : 移動到下一個字的第一個字元。
  • W : 移動到下一個字的第一個字元(以空白鍵或是tab鍵當區隔的跳法)。
  • ctrl + f : 下一頁(forward)。
  • ctrl + b : 上一頁(back)。
  • ctrl + g : 顯示你目前位於整份文件的哪一行。
  • ^ : 移到此行的第一個字元。
  • $ : 移到此行的最後一個字元。

指令模式下的操作

  • :q : 直接離開(在文件沒有被編輯過的情況下可以用)。
  • :q! : 強制離開(不儲存你的修改強制離開)。
  • :wq : 儲存並離開 (wq順序不能反)。
  • :x : 儲存並離開。
  • :set nu : 顯示行號(也有人說:set number,取消則為:set nonumber)。
  • :set list : 顯示看不見的空白字元或tab鍵。
  • :set hlsearch : 搜尋到的字串反白。
  • dd : 刪除游標所在的那一行。
  • 數字 + dd : 刪除游標往下多少行。
  • x: 刪除游標後的字元。
  • X: 刪除游標前的字元。
  • 數字+x(X) : 刪除游標後(前)多少個字元。
  • u : 復原。
  • ctrl + r : 回復(redo)。
  • yy : 複製游標所在的那一行。
  • 數字 + yy : 複製游標下幾行。
  • p : 游標後貼上。
  • P : 游標前貼上。
  • /要搜尋的文字: 游標往下搜尋你要的文字。
  • ?要搜尋的文字 : 游標網上搜尋你要的文字。
  • n : 重複搜尋。
  • N : 反方向的重複搜尋。

Author

2013年8月27日 星期二

Joomla! 3.1.5 解決網址加上?tp=1不work問題

我先講一下在 joomla 的網站,網址加上 ?tp=1 是要做什麼,
類似這樣-->範例網址寫法:http://joomla_blog.localhost/?tp=1
?tp=1 主要是可以在畫面上看出各個模組的位置是在哪裡,像這樣:


這個有趣的做法可以方便你在後台設定模組位置的時候知道其position在哪。
但如果你加了 ?tp=1 不成功的話,可能是設定沒有開,檢查一下:

系統 --> 
全站設定 --> 
佈景主題管理 -->
將『預覽模組位置』改為『啓用的』。(中)

Sysyem --> 
Global Configuration -->
Template Manager -->
set "Preview Module Positions" to 'Enabled'(英)



2013年8月26日 星期一

Joomla! 3.X.X 一些基本的權限管理

這是今天在公司做的微分享,
晚一點我會把一些文字敘述補在下面。

只是一些簡單的基本介紹而已,我還沒有研究到很深啦。



補充第15頁的部分,
如何客制Admin的Menu?


關於這個部分,建議大家參考這邊文章,Customizing the Admin Menu
雖然文章是 2. 多的版本,不過在 3. 多也是通用,
需要注意的是,default_enable.php 的路徑在 3. 多版本已經換了,
以我的joomla是3.1.5版本來說路徑是在:
/YOUR_SITE_DIR/administrator/modules/mod_menu/tmpl/default_enabled.php

我的範例主要是在實作,有些 menu 只給特定的群組看。

另外如何知道使用者群組的id是多少?
使用者群組(user group)的記錄是寫在 前綴字_usergroups 這張資料表。

我撈sql的是這樣撈的:

mysql> use 你的site的資料庫名稱;
mysql> show tables;
mysql> select * from 你的table前綴字_usergroups;


撈出來的結果如下:

mysql> select * from tbrxm_usergroups;
+----+-----------+-----+-----+------------------------------+
| id | parent_id | lft | rgt | title                        |
+----+-----------+-----+-----+------------------------------+
|  1 |         0 |   1 |  24 | Public                       |
|  2 |         1 |   8 |  19 | Registered                   |
|  3 |         2 |   9 |  16 | Author                       |
|  4 |         3 |  10 |  13 | Editor                       |
|  5 |         4 |  11 |  12 | Publisher                    |
|  6 |         1 |   4 |   7 | Manager                      |
|  7 |         6 |   5 |   6 | Administrator                |
|  8 |         1 |  20 |  21 | Super Users                  |
| 10 |         3 |  14 |  15 | Shop Suppliers (Example)     |
| 12 |         2 |  17 |  18 | Customer Group (Example)     |
| 13 |         1 |   2 |   3 | Guest                        |
| 14 |         1 |  22 |  23 | 你只能編輯joomlatesting      |
+----+-----------+-----+-----+------------------------------+

因此假設當我要判斷該 user 是不是 administrator 時,就要先取得group,而且得知該group的id :

$groups = $user->get('groups');
$isAdministrator = in_array(7, $groups);

7這個數字就是對應到資料表上的id為7。



2013年8月22日 星期四

Joomla! 3.X.X 實作多國語系

第一次碰多國語系的設定...
心得是: 有點複雜,
剛剛做成了文件,雖然還是很複雜,不過我已經盡量簡化了。
希望有幫助到你。

文件連結:
[建議看文件連結比較不辛苦]
補充:
前幾天有朋友跟我說有一套 joomlafish也可以做到多國語系的功能,不過我個人是第一次摸Joomla ,所以沒有很清楚這些過去的種種方式,但我剛剛看了一下joomlafish 好像還沒有支援到 joomla!3 ,如果各位朋友有什麼其他的方式也歡迎推薦。


2013年8月21日 星期三

Joomla! 3.X.X 之怎麼辦語系裝不起來...

假如你在 joomla 3 的版本要安裝語系有遇到這樣的 Warning:

     JFolder::create: Could not create directory Path: ...  
     Aborting language installation: Failed to create directory ...  
     Package Install: There was an error installing an extension: ....



不敢肯定我的解法是唯一的解法,只是給大家一個參考,如果你跟我一樣在安裝其他語言時有出現 warning ,請先檢查 joomla 目錄底下所有資料夾的權限是可以寫入的,建議你先到後台的:
System -> System Information 

[yii] 判斷表單送出是否有錯誤

判斷表單送出是否有 Error 才顯示某個 widget 或是才顯示什麼,
參考官方文件之 hasErrors()
http://www.yiiframework.com/doc/api/1.1/CModel#hasErrors-detail
 if($model->hasErrors()) {  
   //echo '你沒有填哦';  
   //echo '你沒有填哦';  
  }  



*雖然這篇文章很簡短,但主要是記錄一些身在使用 yii 開發 web 的前端人員需要多留意的事。

[yii] 如何在 widget 使用 renderPartial

文章的標題是『如何在widget使用renderPartial』。
其實事情是這樣的,我要把一些 html code 包裝到 widget,這樣子下 widget 只要一兩行,頂多帶幾個參數就可以解決寫好幾行 code,並且把一些會重複用到的 html 模組做成 widget 也是前端的樂趣之一。

本來在view file這樣寫:
 $this->renderPartial('_search',array(  
   'model'=>$model,  
 ));  
這樣寫本來就沒有什麼問題。


不過如果要一個 html 結構寫成 widget 的話,
在 widget 就不能這樣用了,
因為直接使用的話會出現:

 __你的__Widget and its behaviors do not have a method or closure 
named "renderPartial".  


因此在widget的時候請使用:

 $this->controller->renderPartial('_search',array(  
     'model'=>$model,  
   ));  


參考:
http://www.yiiframework.com/forum/index.php/topic/27311-how-to-renderpartial-in-widget/


2013年8月14日 星期三

[yii] 如何客製或 extend 自己的 CButtonColumn 樣式

[yii] 如何客製自己的 CButtonColumn 樣式
[yii] How to customize CButtonColumn


這個文章的內容主要是要講怎麼換掉用 CGridView 產生的 CbuttonColumn 樣式,下圖就是用 CbuttonColumn 預設產生出來的三個 icon:
在 yii 另外使用 Gii 產生出來的 CRUD 的 view files,基本上會包含 admin.php, index.php, create.php, update.php, view.php 還有一些用下底線開頭的 _form.php, _search.php, _view.php 檔案,簡單瞭解了一下其產生列表的方式,會在需要產生列表的檔案去使用這個 widget:

 $this->widget('zii.widgets.CGridView', array(....) );  

其中,在後面所帶的array裡,會看到 :
 array(  
       'class'=>'CButtonColumn',  
     ),  

這些預設產生的 Button 就是在這個 Array 產生的,接下來可以看一下官網提供的一些設定api,基本上,這些 Button 的 class, 內容文字, 連結, 底圖都能換。






設定很多,我以我會用到的一些需求為例:

template 屬性:
可以定義icon的出現順序,但若比方說你只寫 'template'=>{view} 那麼只會出現檢視的那顆icon。
 array(  
                'class'=>'CButtonColumn',  
                'template'=>'{view}{delete}{update}',  
           ),  



deleteButtonOptions 屬性 : 
設定 delete icon 的基本屬性 , 以我的例子為例,我想使用 glyphicons 的 icon , 就必須把 delete button class 改成我要的 glyphicon glyphicon-trash。






 array(  
           'class'=>'CButtonColumn',  
           'deleteButtonOptions'=>array('class'=>'glyphicon glyphicon-trash',
                                        'style'=>'background:red'),  
           'deleteButtonImageUrl'=>'' ,  
           'deleteButtonLabel'=>'', //移除文字  
           ),  

deleteButtonImageUrl : 
如果你有自己準備 deleteButton 的 icon ,可以使用這個設定把原本的圖檔路徑蓋掉,因為我是使用改 class name 去顯示 icon ,因此必須把原本塞在裡面的垃圾桶 icon url 清空,若你有自己準備 icon 就可以使用這個屬性。



deleteButtonLabel : 
如果你把 deleteButtonImageUrl 給清空了,也沒有把這個 deleteButtonLabel 清空,就會出現 Delete 文字 ,會像這樣 :


其他 view button 跟  update button 的設定跟上方式一樣的,只是屬性名字換一下而已:

 'updateButtonOptions'=>array('class'=>'....'),  
 'updateButtonImageUrl'=>'' ,  
 'updateButtonLabel'=>'',   
 'viewButtonOptions'=>array('class'=>'....'),  
 'viewButtonImageUrl'=>'' ,  
 'viewButtonLabel'=>'',   



因為我使用的是 bootstrap 的 css ,icon也是使用 glyphicons ,最後我換完的結果就是:

這些設定真是神奇,不過麻煩的是如果你有很多頁都需要使用自己定義的 CButtonColumn 是有點麻煩,所以只好為自己的 Project 另外寫 CbuttonColumn 的 Extend。




寫自己的 Extend CButtonColumn :
我自己試寫了一個 YourCustomCButtonColumn,
這種寫 extend 的做法我還蠻喜歡的,
這樣就不用每次為了換一個 icon 改好幾個 CGridView 的設定,
不寫extend,就是複製貼上一堆 array 設定,
寫extend,只要把原本使用的 CButtonColumn 改成使用自己寫的,
好或不好可行評估。


這是我寫的 extend
路徑可能是 protected/widget/YourCustomCButtonColumn.php 

 <?php  
 Yii::import('zii.widgets.grid.CButtonColumn');  
 class YourCustomCButtonColumn extends CButtonColumn  
 {   
   public $deleteButtonOptions=array('class'=>'你的新class');  
   public $deleteButtonImageUrl = '你的新icon img url';  
   public $deleteButtonLabel = '';   
   //deleteButtonLabel 若不清掉文字則不需要設定成''  
   //以下以此類推  
   public $updateButtonOptions = array('class'=>'...');  
   //...  
   public $viewButtonOptions = array('class'=>'...');  
   //..  
   //public $.....  
 }  


然後別忘了
在始祖的 CGridView.php 是import原本的 CButtonColumn:
Yii::import('zii.widgets.grid.CButtonColumn');

要把它改成 import 你自己寫的那一個:
Yii::import('zii.widgets.grid.CButtonColumn');
Yii::import('path.to.YourCustomCButtonColumn');




再來是 view file 的部分
要將原本使用的 CButtonColumn 改成:

 <?php $this->widget('zii.widgets.grid.CGridView', array(  
      'id'=>'...',  
      'dataProvider'=>$model->search(),  
      'filter'=>$model,  
      'columns'=>array(  
           .....  
           array(  
                //'class'=>'CButtonColumn', 這個不要用了,改用自己寫的(下一行)  
                'class'=>'YourCustomCButtonColumn',  
           ),  
      ),  
 )); ?>  



Hope help you...

2013年8月13日 星期二

認識 Pure CSS 之筆記二:了解Buttons, Tables, Menus

此篇是延續上一篇的內容:認識 Pure CSS 之筆記一:了解Base, Grids, Forms


Buttons:
button一直是我覺得網站上應該要蠻單純的元件,統一風格,大小不要忽大忽小是我最喜歡的狀態。在這裡介紹一下 Pure 的 Button ,幾個大方向要記而已,還蠻單純的。

  • 如果要產生一般的button,使用 class name :pure-button (不論用在<a>還是<button>)。
  • 如果要 disable 效果,請累加 class name : pure-button-disabled ,例:pure-button pure-button-disabled。
  • 如果要 active 效果,請累加 class name : pure-button-active ,例:pure-button pure-button-active。
  • primary效果,例:pure-button pure-button-primary。
  • 客制化你自己的 button , 希望你的客制化 button 的 css 命名可以 follow pure 的命名方式,如 pure-button-red, pure-button-success, pure-button-info,...。
  • pure button 的 size有分幾種等級:
    • xsmall : pure-button  pure-button-xsmall
    • small :  pure-button pure-button-small
    • default : pure-button 
    • large :  pure-button  pure-button-large
    • xlarge :  pure-button pure-button-xlarge
  • button 裡要有 icon嗎? 沒問題,pure 是搭配 Font Awesome ,詳情的載入方式請看pure button 介紹,使用的時候是類似在 pure-button 裡面包 <i class="icon-XXX"></i>。

Tables:

  • 猜猜看pure 的 table 要加什麼樣的 class name 在 table 的標籤上 ? 前面 button 用的是 pure-button,table 則是使用 pure-table ,只要在 table 的 class name 加上 pure-table 就可以得到 pure 的預設樣式。 
  • pure 目前總共提供三種 table 樣式:
    • Default Table
    • Border Table
    • Striped Table

Menus:
menu還蠻多種選擇的,不過有些menu的效果必須搭配 YUI 的 JavaScript。
分頁的項目也算在 Menus 這個項目裡。
這個部分我希望透過實作來瞭解(好敷衍)




其實看到這裡,大概也手癢,只想實作一下:P
官網上也提供了好幾個用 pure CSS 做出來的 Layouts,看了真是超熱血的~
如果我有遇到什麼問題再上來分享吧!



對了,如果很想用 pure ,配色上卻又不知從何下手
歡迎試試看這個 Skin Builder or YUI Skin Builder - Documentation

2013年8月10日 星期六

認識 Pure CSS 之筆記一:了解Base, Grids, Forms



最近本來看一點 Bootstrap 3 RC1,因為 RC1 是我一直有點興趣的 Flat Design 的風格,不過目前用起來沒有想像中 Flat (目前我正在期待正式版),突然想到還有另一套可以用,那就是 Pure 了(是說他也出來一陣子了XD)!

簡單逛了一下 Pure 的網站,只能說我是越看越喜歡,他主打的是輕量而且符合 RWD,又有 Flat Design, 輕又簡單明瞭,大概是我喜歡它的主因吧!另一方面是被網站上的範例給迷住
,感覺得會讓人很有自信的去使用。



Pure 把一般網站上會用得到元素分成幾大類,也就是在官網上面看到的那幾類,就連從github下載下來也以這幾類作為資料夾的分類:


  • Base
    • 主要是使用 normalize.css,你可以把 normalize.css 想成是跟 reset.css '類似' 功能的css檔(說是類似但還是有些不一樣), normalize.css 是一套支援 HTML5 標準的 css reset,然後目前 normalize.css 已經出到 v.2.x 的版本了,不過在 Pure 的文件明確地寫到,目前 Pure 使用 v.1.x 版本,因為 v.1.x 較能支援比較老舊的 IE 版本 ( 原文參考 : We use Normalize v1.x because it supports older versions of Internet Explorer. )。
    • 另一件事情是,所有的 Pure 的模組都是建立在 normalize.css 之下。
    • H1~H6 的字型大小的單位是使用 em。
    • 關於 ol, ol, dl, Pure都有預設的樣式,如果是想要用這些做 Menus 的東西,建議你另外看 Menus 的系列。
  • Grids( and Responsive Grids)
    • grid ,如果有用過 grid 的人,看文件應該不會太難理解,不過我從以前就沒有好好理解過 grid,可能是我不喜歡這麼多 class name 加在 html 標籤裡。
    • Pure 的 grid , 只用一個 pure-g 就是一個 row 或是一個 grid, 使用 pure-u-*-* 代表 pure-g 裡面的 columns 或是 units 。 每個 pure-g 可以包含好幾個 pure-u-*-*。
    • pure-u-*-* 的寫法可以想像成 pure-u-分子-分母,我以官網提供的範例來說,假如你有一個row裡面分成三小塊,也就是說 pure-g 會有三塊 pure-u-*-*,所以每一塊都是1/3,那麼 html 結構看起來就會像是這樣 :
       <div class="pure-g">  
         <div class="pure-u-1-3">  
         </div>  
         <div class="pure-u-1-3">  
         </div>  
         <div class="pure-u-1-3">  
         </div>  
       </div>  
      
    • 另外每個 pure-u-*-* 預設是沒有 padding/margin , 如果你需要必須自己加在 pure-u-*-* 的子層,還是看一下原文可能較好理解:
    • 原文:By default, grid units don't have any margin/padding.  If you want to add these, put them in a child container.
    • 如果你希望你的 grid 是要符合 RWD 的話 , 只要把 pure-g 換成 pure-g-r ( r 代表著reponsive 的意思 ),你可以直接使用 pure-g-r 就可以了,只要父層使用 pure-g-r , 他的子層 pure-u-*-* 就會自動變成 reponsive 的形式了 , 所以你某個的 grid 要不要有RWD,看你有沒有使用 pure-g-r 來決定,原文參考 : All elements with a class name of pure-u-*-* will automatically become responsive if they are direct descendents of a pure-g-r.。
    • 有興趣可以看看這個網站 YUI Grid Builder 。
  • Forms
    • 老實說 Pure 的 Forms 看起來還蠻像 Bootstrap (逃)。
    • 如果你是要 form 的內容是 inline 形式的 ( 這也是預設的形式 ),請在 <form> 加上 pure-form 的 class , ex:<form class="pure-form">...</div>。
    • 如果是要 form 的內容一堆疊形式的,除了加上 pure-form 的 class name 之外,還要補上 pure-form-stacked 的 class name ,ex:<form class="pure-form pure-form-stacked">。
    • 還有一些表單元素的 class name 使用方式,因為有點零碎,我就不再說明了。


有點晚了,我想剩下的部分,會再找時間把document看一看,把筆記補齊。


Q&A:
normalize.css 跟 Reset 有什麼不同嗎 ?
( 搜尋關鍵字 : Normalize vs Reset ) 
看了之後還是不太懂(英文不太好),感覺起來像是 reset 是要把 browser 預設的樣式清掉, 而 normalize.css 則是想把法讓所有的樣式在不同的 browser 看起來能夠一致 ; 看起來感覺前者很像是減法,後者是加法。(<---若我理解方式有錯誤跪求分享較精確的解釋><) 



其他參考資源 :




2013年8月9日 星期五

您也遇過Call to undefined function tidy_parse_string()嗎?

不知道大家有沒有遇過個問題,明明tidy之前裝起來好好的,怎麼突然換台電腦git pull下來變成這副德性,這裡提供我的解法:(不是唯一解法)


1. 確認php.ini有打開extension=php_tidy.dll。



2. 要重新啓動apache。



3. 啓動之後,如果還有這個問題,務必打開phpinfo.php頁面,或是自己開一個頁面寫個:

<?php
    phpinfo();
?>

就可以測試了,搜尋tidy有沒有在phpinfo()裡面,如果有的話,應該就沒什麼問題。


注意,如果tidy沒有出現在phpinfo(),表示你的PHP沒有裝tidy。快去找裝法吧!




參考連結:

奇怪的error之Parse error: syntax error, unexpected $end

Parse error: syntax error, unexpected $end。

這個奇怪錯誤訊息,
出現在我把一個原本使用較低版本的php寫的網站移植到版本較高的php的server。
天吶!四處怎麼點頁面都是這個error,真是差點瘋掉。
是不是php版本問題,我不確定,因為這次的環境跟之前不一樣,除了php版本不同之外,之前是用window當server,而現在是用Linux當server。

後來的解決方式是一頁一頁檢查是不是所有的php tag都是完整的。
所謂完整就是:
<?php //content ?>

因為我有幾個php的tag漏了php,只寫<? //content ?>,這就是造成我這些error的重大兇手。
這件事告訴我以後寫php多謹慎一點,像今天這種情況,就是我平常累積的壞習慣造成的,謹記在心。




如果你也有這個error,提供以下連結讓您參考:



2013年8月7日 星期三

Joomla! 3,來換個語系好了(英文切換繁中)

不知道為什麼架在windows上的joomla!3在換語系上面非常的順暢,反之使用mac時一直出現問題(也許是檔案權限或是有的沒的),後來也沒換成功><

以下簡報供您參考: 連結
 

Joomla! 3.X.X 安裝初體驗與步驟分享

這應該是我第一次認真用架站吧...以前沒有特別需要會想要用這個。
安裝了一整晚加上整理文件弄到12點多(昏)
在這裡先補上我的投影片: 連結

 我的環境等等...
  • 作業系統使用的是windows7。
  • 裝上XAMPP的1.8.2。
  • 使用的php是5.4.16。
  • 目前用的是joomla 3.1.5,總之以3以上為主,目前還不考慮用2.5。
心路歷程:
  • php版本很重要。
  • 遇到怪bug不如重裝符合需求的環境,因為網路上的回答常常千奇百怪,一點小錯誤會引發的原因有很多種,這時後就是不要發懶,與其東補西補不如砍掉重練(重裝符合環境的XAMPP或是appserv)。
  • 有了XAMPP跟appserv什麼都幫你包好了... ,而且用xampp跟appserv的好處是不管你是資料庫進不去還是忘記資料庫密碼還是環境跟joomla不合還是甚麼大大小小問題只要uninstall之後再重裝其他版本的就好。
  • 需要耐心.... 
  • 第一次解壓縮下來的joomla,會有一個installation資料夾,那也是安裝介面的路徑(ex:http://localhost/myjoomla/installation),初學第一次安裝使用他們的介面一步一步走感覺很方便,我原本以為我自己寫一些設定在他們的config資料夾之類的。
  • 祝您也安裝成功! 晚安地球人

2013年8月5日 星期一

event.preventDefault()跟return false的差別是?

不知道大家知不知道event.preventDafault()跟return false的差別是什麼?
有的話歡迎一起討論,可以一起長知識XD

這個問題很有趣,是我這幾天工作突然在stackoverflow看到有人發問,特別把網址存起來想說有時間再回來看。老實說我也不是很清楚這兩者的真正差別(一整個亂用XD)。

我只記得以前自己看書做網頁上的某個表單送出,會先自己寫個驗證,哪個欄位沒有填就要有個alert,然後不能讓表單送出,所以那時候學會了return false。:p

至於preventDefault()是我在前一間公司學到的經驗,就是我在一個有好幾個父元素的某個標籤(ex.<a>),綁定了click事件,結果並沒有如我預期發生,產生了一些詭異的現象,那時候還以為是syntax的bug,因為那時候不懂冒泡事件。

by the way, 大家可以參考我去年寫的note(><):


先不管冒泡事件,拉回正題繼續討論event.preventDafault v.s return false!
大家可以參考一下這篇文章 :
event.preventDefault() vs. return false
我大概用中文解釋一下這篇的內容:

  1. event.preventDefault()會阻擋預設要發生的事件.
  2. event.stopPropagation()會阻擋發生冒泡事件.
  3. 而return false則是前面兩者的事情他都會做:
    • 他會做 event.preventDefault();
    • 他會做 event.stopPropagation();
    • 停止callback function的執行並且立即return回來


不要總是偏好使用某一種方式,什麼時候該用什麼,還是要視你的目標跟預期狀況而決定。

相關參考:

2013年8月3日 星期六

當網站的畫面有跑版或其他前端相關的bug,該如何處理?

做前端如果一直遇到莫名bug,會是一件很麻煩的事情.
可以的話就要盡量debug,問題出在哪都還不確定,盡量別推說是瀏覽器的錯:P
所以當網站的畫面有跑版或其他前端相關的bug,該如何處理?

我這裡提供一些我自己的方法:

  • 若是跑版問題,是否該檢查一下html結構是符合邏輯的(ex: 行內元素v.s塊級元素; tag沒包好...etc),會不會當初為了趕出prototype而做出來所以沒搞好架構。
  • 瞭解你下過的css以及從別的地方copy過來的css,有時候可以注意 :hover 跟 :active 或 :focus 是不是下過了什麼css,這種事情還蠻容易被忽略。
  • z-index; 浮動(float); clearfix; position:absolute v.s relative等等之類的問題。
  • 你的css所使用的單位,不要沒下:active時是用px, :active時卻是em,單位要多注意。
  • 是不是在其他地方使用了important或是再之後載入的css把它override了? (使用開發人員工具多檢測)
  • 每個瀏覽器都可能有自己的預設的html tag樣式,你是否已經reset了。
  • 瞭解你的程式碼...
  • 注意是否有用jQuery的selector去控制某Dom的css,以及其執行的時間點。
  • 是不是使用其他JavaScript Framework或是library有影響畫面的?
  • 上社群問人。
  • 找stackoverflow(推!)。
  • 問同事。
  • 上線前還有機會debug,(如果你還有精神加班的話)別太快放棄。
感謝Caesar分享他的經驗,特此補上幾點:)
  • check js error is or not ( chrome developer tool)
  • clear cookie and session and local strorage
  • open incognito window
  • switch another browser

目前就這些了
有想到我在補上來:P
也歡迎大家提供自己的想法.


Vue multiselect set autofocus and tinymce set autofocus

要在畫面一進來 focus multiselect 的方式: 參考: https://jsfiddle.net/shentao/mnphdt2g/ 主要就是在 multiselect 的 tag 加上 ref (例如: my_multiselect), 另外在 mounted...