此文為大家整理出幾款非常好用的JavaScript 表格控件分享給大家,希望對大家有所幫助!
1.Handsontable(用純JavaScript,也可與 AngularJS指令 和聚合物組成。)
2.JsGrid(基于jQuery的輕量級客戶端數據網格控件。它支持基本的網格操作,如插入、過濾、編輯、刪除、分頁和排序。jsgrid是靈活的,允許自定義其外觀和部件。)
3.FancyGrid(一個插件的免費圖書館,它沒有依賴但jQuery和AngularJS集成。fancygrid還包括樣品數量、專業支持、優雅的API,當然詳細的文件,方便使用。)
4.jqGrid(是一個支持Ajax的JavaScript控件,它提供了在Web上表示和操作表格數據的解決方案。)
5.W2ui(圖書館一體化解決方案。它包含所有最常見的UI小部件:布局、網格、邊欄、制表符、工具欄、彈出框、字段控件和窗體。你不需要拼湊一個不匹配的插件來完成你的目標。)
6.dhtmlxGrid(一個功能全面的JavaScript網格控件,它提供了尖端的功能、強大的數據綁定和大數據集的快速性能。豐富而直觀的JavaScript API使網格具有高度的可定制性和易用性。)
7.jQWidgets(是一個專業的觸摸功能完整的框架使jQuery插件、主題、輸入驗證、拖放插件,數據適配器,內置WAI-ARIA可達性、國際化和MVVM支持。)
切版 qieban(.cn)
一節我們實現了分類樹的右鍵菜單彈出,本節我們繼續實現數據從瀏覽器到數據庫的工作。
我們先來豐富右鍵菜單的選項,在Menu控件中添加MenuItem,分別是修改節點和刪除節點:
<Menu Style="@menuStyle">
???????<MenuItem OnClick="CreateNode">
???????????@menu_create_text
???????</MenuItem>
???????<MenuItem OnClick="ModifyNode">
???????????修改節點
???????</MenuItem>
???????<MenuItem OnClick="DeleteNode">
???????????刪除節點
???????</MenuItem>
???</Menu>
由于修改和刪除不像創建涉及到不同的名稱,所以菜單文章內容直接寫死。事件響應代碼一并復制就好。
void ModifyNode(MouseEventArgs args)
{
menuStyle = "display:none;";
}
void DeleteNode(MouseEventArgs args)
{
menuStyle = "display:none;";
}
運行效果:
我們的右鍵菜單現在有了事件觸發,接下來要彈出分類編輯頁面來錄入信息。我們首先需要創建一個名為CategoryEdit.Razor組件,過程跟上一節我們創建ContextMenuPanel一樣。如下圖:
這個過程我們以后就不再講了。
有同學私信問不使用Ant Design組件,直接用Blazor系統的組件可行嗎?我覺得這個問題比較有代表性,所以這個CategoryEdit我就不使用Ant Design的組件來完成。先上完整的代碼吧:
<div style="width:100%; display:@display;">
<div class="page">
<div @onclick="toggle" id="close">X</div>
<div style="padding: 10px;">
<ul>
<li class="item"><span>編碼:</span><input @bind="@Value.Id" /></li>
???????????????<li class="item"><span>名稱:</span><input @bind="@Value.Name" /></li>
???????????????<li class="item"><span>所屬Id:</span><input @bind="@Value.ParentId" /></li>
???????????</ul>
???????????<ul>
???????????????<li class="item">
???????????????????<span>是否有子類:</span>
???????????????????<select @bind="@has_child">
???????????????????????<option value="1">true</option>
???????????????????????<option value="0">false</option>
???????????????????</select>
???????????????</li>
???????????????<li class="item"><span>分類類型:</span><input @bind="@Value.Type" /></li>
???????????????<li class="item"><span>顯示順序:</span><input @bind="@Value.ShowOrder" /></li>
???????????</ul>
???????????<div>
???????????????<label>分類描述:</label>
???????????????????<textarea style="width:100%; min-height:200px;" @bind=@Value.Description></textarea>
???????????????<label>備注:</label>
???????????????????<textarea style="width:100%; min-height:200px;" @bind=@Value.Remark></textarea>
???????????</div>
???????????<button @onclick="save">保存</button>
???????</div>
???</div>
</div>
@code {
???string display = "none";
???public void toggle()
???{
???????display = (display == "none") ? "block" : "none";
???}
???[Parameter]
???public EventCallback OnSave { get; set; }
???[Parameter]
???public Model.Category Value { get; set; }
???int has_child = 0;
???void save()
???{
???????Value.HasChild = (has_child == 0) ? false : true;
???????if (OnSave.HasDelegate) OnSave.InvokeAsync();
???}
}
樣式文件CategoryEdit.razor.css
.page { width:960px; border: 1px solid #CCC; margin-left:auto; margin-right:auto; }
.item { width: 280px; list-style:none; display: inline-block; }
.item span { width: 100px; display: inline-block; }
#close {
position: relative;
text-align: center;
cursor: pointer;
background: #FCC;
float: right;
width: 20px;
height: 20px;
}
#close:hover {
background-color: #F00;
}
上部分為html元素標簽,具體標簽和布局就不展開講了。
@display是引用下面code中的變量,只要display的值變化,這里就會隨之生效;
@onclick是綁定click事件;用到了兩處,一個是右上角的關閉按鈕,一個是下方的保存按鈕;
@bind="@Value.Id跟上面的@display類似,只是這個用于控件,控件的值與變量值雙向綁定;
public void toggle()是切換是否顯示的方法,默認隱藏,調用一次就切換一次;
[Parameter]是定義CategoryEdit組件的屬性;
public EventCallback OnSave是聲明一個OnSave的函數作為回調;
public Model.Category Value是要編輯或新建的Category數據實體;
int has_child是對應Model.Category中的HasChild,在標準select及option中無法直接綁定bool類型的熟知,所以用has_child來作為媒介;
void save()則是保存函數,做數據處理后回調OnSave;
css文件在blazor中是隔離的,即聲明一個跟razor組件同名的css文件,它就會從屬于這個razor組件,只對這個razor生效,這樣可以很好的解決不同css文件命名相互沖突的問題。
上面完全都是靠代碼堆的,這里有點沒想明白為什么微軟不延續winform、webform的所見即所得的方式,哪怕是有個設計視圖瀏覽也好。難道是技術上過于復雜嗎?目前以Blazor這種開發方式,想要看到修改效果,哪怕是只調一個顏色,都只能重新編譯運行才能看到效果,非常影響開發效率。以前webform的那種,改前端根本需要編譯,重新刷新頁面就好。希望這里未來能有改進。
CategoryEdit組件設計完成后,我們就可以在Index.razor中使用它了
<CategoryEdit @ref="categoryEditor" Value="@curCategory" OnSave="@SaveCategory"></CategoryEdit>
@code {
CategoryEdit categoryEditor;
Model.Category curCategory = new Model.Category();
void SaveCategory()
{
}
}
我們只需要這幾行代碼就夠了。對屬性賦值,響應事件。然后我們先來看下效果:
我們可以看到,調用完成后,在Index.razor中的SaveCategory函數中,curCategory中的值就都有了。實際上我們用的控件庫,比如Ant Design也都是這樣一步一步來完成的,只要有時間、有耐心,啥都不是事。
到目前為止,我們已經完成了前端的數據準備,接下來我們就是要通過WebAPI正式向服務器提交信息了。在一般的公司中,前端和后端都是分開不同團隊來做的,后端做完提供接口,前端按照接口規范進行調用。那我們接下來的事情就是要做后端的工作了,考慮到同樣編碼內容較多,這節暫時到這里,我們下節繼續。
----------------------------------------------------
本教程項目源碼已作為開源項目加入到Gitee,代碼內容會隨教程實時更新,大家有興趣的話可以關注我,以獲得最及時的更新。私信:
私人日記 可以獲取相關鏈接;
大家閱讀過程中有哪些看不懂或未盡興的地方,可以在評論區留言,我會先記下來在后續的教程中找機會再說。
教程有幫助的話請大家幫忙關注、轉發、擴散,能不能開專欄還需要你們的支持!
頁編程之圖片、隱藏。
同學們好,這里是免費少兒編程知識分享,每天一行代碼誰都能學會。今天分享的知識是為網頁添加圖片控件和隱藏控件,用到的是input標簽的type屬性值,image和hidden。這兩個控件太過于簡單,所以我就放在一起講了,同時介紹了image控件button的image內容,以及IMG控件之間的區別。演示了hidden控件在實際編程中的作用。
先來看看今天實例的運行效果。網頁上分為兩段。
·第一段中有三張圖片,第一張就是type屬性等于image的效果,第二張是button中包含IMG標簽的效果,第三張是純IMG標簽的效果。這三張圖片的共同點是圖片完全一致。不同點是type=image,直接將整張圖片做成了提交按鈕,點擊之后即可提交整張表單,但外觀表現時仍然和普通的圖片是沒有任何差別的。
·第二張是button按鈕中使用了IMG標簽,雖然它也有提交和圖片,但是它最外面仍然保留了按鈕的外邊框,看上去是以按鈕為主。
·第三章中直接使用IMG標簽,它沒有提交功能就是一普通的圖片,但是我們仍然可以通過JS的submit函數來使其提交表單。
·第二段是一個密碼框一個提交按鈕。這一句話只是為了方便你們找到隱藏空間的位置,我還做了兩個hidden的隱藏控件,但是你們看不到,我隨便在這里輸入密碼,然后點擊按鈕時,JS就會取出(密碼)控件的值和隱藏控件中的值并且彈出對話框提示。
這里有兩點需要注意,可以看到密碼控件中的值在這里仍然是明文顯示的,證明它只是視覺上是*或者圓點,實際在數據傳輸中仍然是明文并沒有加密。
·第二點是隱藏控件中的值被成功讀取,看不到并不代表不存在,效果各位同學都已經看到了。
在我們來看看實現的代碼,先講image值,它的關鍵屬性就是src和ID,也就是引用地址和命名,沒有什么好講的。我其實是不建議你們使用這個控件的,因為一般表單提交前,都會加上一層一層的驗證,比如說是必填、b7手勢、數字、格式是否正確。這個時候除了最基礎的控件類型驗證外還會用到 gs驗證。而如果使用 gs驗證就需要用到自定義函數,在提交到服務器前就驗證好。
如果用戶數據是正確的就提交,如果不正確就終止提交操作提示用戶修改流程,這樣看上去沒有問題,但因image控件討厭也就討厭在這里。
·若用這種方式提交可能會發生表單提交兩次的現象,經常會造成表單元素被重復提交,數據庫被寫入異常,所以盡量不用或者少用。
·至于hidden控件常用來保存一些不需要或者不希望展示給用戶的數據,他的常用屬性就是無這個Value和這個id。
我舉個例子幫助你們理解,現在客戶要求建立一個注冊新用戶的界面,但是要求將注冊步驟分為兩步。第一步,需要用戶填寫手機和昵稱,然后跳轉至第二頁,輸入密碼和其他的信息,第二頁肯定就不需要顯示出來用戶在第一頁的時候輸入的數據了。但這些數據又必須在第二頁的時候一起提交至服務器。
這時候就可以使用到隱藏控件--接收第一頁提交過來的數據并且不顯示,用戶也感受不到。直接填好信息提交時第一頁的數據也以隱藏空間的方式一起提交了。這僅僅是hidde空間的一個使用場景,還可以收集用戶信息、確定用戶身份、判斷提交源,在多個form表單中建立關節聯、做全局變量等,總的來說應用方式還是很廣的。
在目前這個階段就只需要知道這兩控件能干什么和基礎寫法,計算完成后面到具體的使用場景時會再詳細講解。
好了,今天的分享就到這里,希望各位同學下去能夠照著寫三遍,做到不看視頻也能夠寫出來,所有的案例及相關文檔均可以向我獲取。下期見。網頁編程·服務端編程·數據庫·算法,點贊點關注吧!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。