亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

jQuery 綁定事件到動態創建的元素上的方法實例

2019-11-20 22:23:27
字體:
來源:轉載
供稿:網友

在進入主題之前,我們先來看一個前臺頁面經常用到的功能:點擊頁面輸入框時自動選擇其中文本。

很容易想到利用輸入框的focus事件,當輸入框獲得焦點時,再調用jQuery的select()方法。

Okay,想法很簡單,邏輯似乎也無錯。具體我們來看一下現實到底能不能實現。

1.頁面構造個表單,放上幾個輸入框。代碼看起來是這樣子的。

復制代碼 代碼如下:

<form action="/" method="post">
        <table>
            <tr>
                <td>Name:</td>
                <td>
                    <input type="text" name="name" value=" " />
                </td>
            </tr>
            <tr>
                <td>Age:</td>
                <td>
                    <input type="number" name="age" value=" " />
                </td>
            </tr>
            <tr>
                <td>Tel.:</td>
                <td>
                    <input type="tel" name="tel" value=" " />
                </td>
            </tr>
            <tr>
                <td>E-mail:</td>
                <td>
                    <input type="email" name="email" value=" " />
                </td>
            </tr>
            <tr>
                <td>Birth:</td>
                <td>
                    <input type="datetime" name="birthday" value=" " />
                </td>
            </tr>
        </table>
    </form>

出來的界面在Chromium里差不多是這個樣子的:

2.然后開始寫我們的JavaScript代碼來實現單擊選中框內的文本,根據之前的想法,實現起來差不多應該是下面這個樣子:

復制代碼 代碼如下:

<script type="text/javascript">
        $(function () {
            $("input").focus(function () {
                $(this).select();
            })
        })
  </script>

3.然后再去頁面小試一下,看效果出來沒有。嘗試之后發現,差不多算是成功了一半。什么情況叫?如果此刻你也跟著寫了代碼,你會發現,間單擊輸入框時,框中文本會閃爍。再進一步才會發現,只有當鼠標按下不放,輸入框內文本才是保持選中狀態,是我們預期的。當松開時選擇效果消失。無盡惆悵!

而且這還只是僅僅在Chromium中的情況,在IE中更為奇葩,連一丁點選擇的效果都沒有綻放出來。直接把代碼無視了。

對于火狐,水壺(如果你還不知道它的存在的話:火狐近親,Mozilla 官方承認的64位高效版本火狐變種版本)我已經無力去測了。

下面直接給出經過Google之后找到的能在全瀏覽器中工作的代碼:

復制代碼 代碼如下:

<script type="text/javascript">
        $(function () {
            $("input").focus(function () {
                var input = $(this);
                setTimeout(function () {
                    input.select();
                });
            })
        })
 </script>

而關于上面這段能夠正常工作的代碼,還有一點神奇之處。那就是我和大家可能都覺得

復制代碼 代碼如下:

var input = $(this);
                setTimeout(function () {
                    input.select();
                });


復制代碼 代碼如下:

                var input =$(this);
                setTimeout(function () {
                    $(this).select();
                });

這兩種寫法應該是完全一樣的代碼吧,所以后者也應該能夠達到預期的效果才對。但事實上換成第二種后,效果不見了!根本無法讓文本自動選中!!

這是一般人所無法理解的高度。

Okay,回歸繼續看我們的輸入框現在怎么樣了?,F在只要輸入框中有文本,隨便點一下就自動選中且松開鼠標后不反彈。很好,要的就是這種效果。

 

下面,才是本文的真正主題,如何將特性,或者說事件處理器,綁定到動態創建的頁面元素上。

接著上面這個功能講。上面的代碼也許解決了一個表單頁面的需求,在且僅僅是在這個頁面,輸入框具備這種獲得焦點后自動將文本選中的特性?;蛘哒f擁有我們代碼中所綁定到輸入框focus事件上的處理器,當然,這個處理器就是選擇文本。

如果說上面的說法有點令人頭暈找不到北,下面我將用平生最為直白的語言再次闡述同一觀點:假如其他頁面也有輸入框,是不是每個頁面都去寫一段相同的代碼來實現這樣的效果。

或者說同樣是在當前頁面,當用戶填完相應資料后,我們再動態生成一些輸入框,而這些后來生成的輸入框如何也擁有獲得焦點選中文本的功能。

為了演示,我們檢測如果用戶輸入了Name,我們再在下面創建一個輸入框可以輸入昵稱??梢灶A見得到,這個后來通過JavaScript代碼插入到DOM中的輸入框其中不會有其他輸入框一樣的效果的。因為我們使文本自動被選中的代碼是在頁面加載時執行的,而頁面加載時這個后來插入的輸入框還不存在呢。

下面是新加的對name輸入框監聽的代碼:

復制代碼 代碼如下:

$("input[name='name']").change(function () {
                $("tr").first().append(' <tr>' +
                                          '<td>Nick name:</td>'+
                                           '<td>'+
                                                '<input type="text" name="nickname" value=" " />'+
                                           '</td>'+
                                        '</tr>')
            })

下面到頁面去測試一下,在Name中隨便輸入點什么吧。并且測試生成的輸入框是不能將文本自動選中的。

下面給出使動態創建的元素得到之前綁定的事件處理器的方法:

復制代碼 代碼如下:

$("body").on('focus', "input", function () {
                var input = $(this);
                setTimeout(function () {
                    input.select();
                });
            });

這個方法未免有點取巧,但也是我覺得目前為止所知道的比較好的辦法。因為jQuery1.9之前其實是有個live()函數專門來做這樣類似的工作的,它可以將事件處理器綁定到未來未還未被創建的元素身上,但后來隨著jQuery版本的升級,不提倡用這個live()方法了。既然不提倡了,自然有它的理由我也就不細究了,就像之前我細究了一下jQuery為什么廢除了檢測瀏覽器相關的函數一樣。

如果我們將上面的方法寫到網站的母版頁當中,那么就不必在每個有輸入框的頁面都寫相同的代碼來實現了,同時對于后來動態創建的元素也都應用上了效果。

上面關于輸入框的例子只是為了演示,當然不局限于這個例子,這樣處理動態創建元素的需求還是很常見的,至少我在項目中都遇到過幾次了,在不同的情形下。比如在呈現給權限不夠的用戶的頁面中,有些按扭需要禁用,但用戶是可以點擊添加來增加一行,而每行都會有刪除修改按扭,這時候可以將disable應用到一個表格中新增加的行中的按扭上。

行到水窮處,坐看云起時

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩美女在线观看一区| 18久久久久久| 亚洲天堂第二页| 国产91在线播放九色快色| 欧美尺度大的性做爰视频| 国产亚洲精品激情久久| 久热国产精品视频| 国产精品丝袜久久久久久不卡| 日本一区二区不卡| 亚洲人午夜精品免费| 亚洲精品影视在线观看| 久久久久久久久久国产精品| 2019亚洲男人天堂| 国内精品伊人久久| 91大神福利视频在线| 精品高清一区二区三区| 中文字幕精品一区久久久久| 欧美性极品xxxx做受| 国产精品高潮呻吟久久av黑人| 亚洲国产精久久久久久久| 中文字幕欧美国内| 久久69精品久久久久久国产越南| 亚洲国产精品悠悠久久琪琪| 亚洲欧美国产另类| 精品国产户外野外| 神马久久桃色视频| 国产精品久久久av| 欧美在线视频导航| 久久中文字幕在线| 一二美女精品欧洲| 欧美理论电影在线播放| 午夜精品久久久久久99热软件| 久久久之久亚州精品露出| 永久免费看mv网站入口亚洲| 久久久精品一区| 日韩毛片在线观看| 亚洲国产日韩欧美综合久久| 欧美中文字幕在线播放| 久久精品在线视频| 亚洲一区二区三区久久| 中国china体内裑精亚洲片| 91国偷自产一区二区三区的观看方式| 中文字幕国产精品久久| 亚洲a∨日韩av高清在线观看| 国产欧美亚洲视频| 久久久噜久噜久久综合| 国产成人av网| www.欧美三级电影.com| 亚洲精美色品网站| 久久精品国产2020观看福利| wwwwwwww亚洲| 成人在线一区二区| 午夜精品一区二区三区av| 欧美激情啊啊啊| 亚洲国产精品va在线看黑人动漫| 日韩av一区二区在线观看| 亚洲欧美日韩区| 国产精品夫妻激情| 国产精品丝袜久久久久久不卡| 国产精品美女无圣光视频| 538国产精品一区二区在线| 中文字幕日韩电影| 日韩在线观看免费全| 国产精品免费一区| 亚洲影院在线看| 欧美裸体xxxx极品少妇| 91av在线视频观看| 成人亚洲综合色就1024| 欧美激情在线观看视频| 国产乱人伦真实精品视频| 欧美高清电影在线看| 精品中文字幕视频| 97精品国产97久久久久久免费| 最近中文字幕mv在线一区二区三区四区| 精品在线小视频| 亚洲美女在线看| 97久久精品视频| 欧美在线日韩在线| 久久综合久久美利坚合众国| 亚洲欧美日韩一区二区在线| 一本一本久久a久久精品综合小说| 在线看国产精品| 欧洲亚洲免费视频| 精品国产一区av| 国产日韩在线免费| 在线观看国产精品日韩av| 国产一区二区三区在线播放免费观看| 97欧美精品一区二区三区| 日韩经典中文字幕在线观看| 91麻豆国产语对白在线观看| 久久香蕉国产线看观看av| 久久人人爽人人爽人人片亚洲| 欧美日韩爱爱视频| 日本久久久久亚洲中字幕| 久久久最新网址| 大荫蒂欧美视频另类xxxx| 久久久999精品免费| 欧美激情视频一区二区| 日韩精品在线观看一区二区| 精品视频—区二区三区免费| 不用播放器成人网| 亚洲精品福利资源站| 久久综合久中文字幕青草| 高清欧美电影在线| 亚洲美女av在线播放| 亚洲性无码av在线| 91精品国产沙发| 在线丨暗呦小u女国产精品| 日韩理论片久久| 疯狂做受xxxx欧美肥白少妇| 在线免费观看羞羞视频一区二区| 日韩免费观看网站| 亚洲精品国产精品乱码不99按摩| 国产亚洲精品美女| 伊人久久久久久久久久久| 亚洲黄色av女优在线观看| 国产精品自拍偷拍视频| 最好看的2019的中文字幕视频| 久久久精品一区二区| 中文字幕日本精品| 在线视频欧美日韩精品| 亚洲欧美日韩在线一区| 国产一区二区三区在线看| 国产精品视频最多的网站| 永久免费看mv网站入口亚洲| 国产亚洲一区精品| 久久免费视频这里只有精品| 欧美激情视频一区二区| 国产视频观看一区| 亚洲自拍偷拍第一页| 国产精品激情av电影在线观看| 亚洲成人精品视频| 中文字幕亚洲一区在线观看| 精品久久久久久久久久久久| 亚洲自拍偷拍一区| 欧美福利视频在线| 欧美日韩在线视频一区| 欧美理论电影在线播放| 欧美高跟鞋交xxxxxhd| 日韩精品视频免费在线观看| 成人欧美一区二区三区黑人孕妇| 国产欧亚日韩视频| 性欧美办公室18xxxxhd| 法国裸体一区二区| 欧美一级黄色网| 久久精品久久精品亚洲人| 亚洲第一在线视频| 欧美日韩国产精品一区二区三区四区| 亚洲国产成人久久| 日韩精品高清在线观看| 98精品国产自产在线观看| 亚洲人成电影网站色www| 亚洲人成电影在线观看天堂色| 亚洲片在线观看| 欧美综合在线观看| 国产精品日韩在线播放| 国产热re99久久6国产精品| 久久久人成影片一区二区三区| 97精品免费视频| 国产亚洲精品91在线| 91亚洲va在线va天堂va国| 日韩a**中文字幕| 国产日韩欧美成人| 久久露脸国产精品|