中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用AngularJS對動態增加的DOM實現ng-keyup事件

發布時間:2021-07-06 14:28:31 來源:億速云 閱讀:157 作者:小新 欄目:web開發

這篇文章將為大家詳細講解有關如何使用AngularJS對動態增加的DOM實現ng-keyup事件,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

我們經常在網頁中看到這種形式的內容,如圖:

如何使用AngularJS對動態增加的DOM實現ng-keyup事件

用鼠標點擊一下,就變成了一個input,如圖:

如何使用AngularJS對動態增加的DOM實現ng-keyup事件

如果未輸入內容,并且鼠標離開后,則變回了原來的樣子;如果輸入了內容,即使鼠標離開,也保持內容不變,此時輸入回車,則添加內容,并清空輸入框。

我在想這個是這么實現的?想了一下有這么一個思路:普通情況下這個是一個divp元素,點擊之后變成一個input元素,鼠標離開則變回原元素。代碼(含詳細注釋版)如下:

window.onload = function () {
  // 頁面加載完給id為click-to-add的元素增加onclick方法
  document.getElementById("click-to-add").onclick = function () {
    // this在這個函數中就是id為click-to-add的元素,將其保存到變量non_input_type
    var non_input_type = this;
    // 新建一個input,保存到變量input_type
    var input_type = document.createElement("input");
    // 給input添加class和placeholder,這里我發現class對bootstrap有效
    input_type.setAttribute("placeholder", "添加待辦事項");
    input_type.className = "form-control";
    // 獲取父元素,然后父元素替換Child
    this.parentNode.replaceChild(input_type, non_input_type);
    // 設置焦點到input框中
    input_type.focus();
    // 當input失去焦點,即鼠標點到了別的地方
    input_type.onblur = function () {
    // 且input中沒有輸入內容時
    if (input_type.value.length === 0){
      // 再替換回原來的對象
      input_type.parentNode.replaceChild(non_input_type, input_type);
      }
    }
  }
};

對應的html代碼則很簡單:

  <div>
    <p id="click-to-add">
      <span>+</span>
      <span>添加待辦事項</span>
    </p>
  </div>

那么input怎么響應回車呢?html自帶的onkeyup可以很容易做到,在此不演示,可以自行搜索。而在Angular中,可以給input增加ng-keyup來實現,這個本來也很簡單,但在現在的這個問題中,input不是一開始就有的,而是新生成的,直接使用ng-keyup并不起作用,Angular只會監聽在頁面加載完時的ng方法,新增的則無效,要使新增的DOM也能響應Angular方法,需要對其使用$compile方法,在前文this.parentNode.replaceChild(input_type, non_input_type);這句代碼之前增加以下兩行:

// 增加ng-keyup事件,對應執行send($event)這個函數
input_type.setAttribute("ng-keyup", "send($event)");
// 對input_type使用$compile方法
$compile(input_type)($scope);

接下來還要編寫send方法,如下:

$scope.send = function (e) {
  // 不同瀏覽器獲取按鍵代碼不一樣,有的是e.keyCode,有的是e.which
  var keycode = window.event?e.keyCode:e.which;
  // 回車對應13
  if (keycode === 13){
    // e.targe就是對應的DOM,這里獲取到value就按自己的需求去處理了
    alert("Add ToDo: " + e.target.value);
    e.target.value = "";
  }
}

演示如下,普通情況下是這樣的:

如何使用AngularJS對動態增加的DOM實現ng-keyup事件

點擊后變成輸入框:

如何使用AngularJS對動態增加的DOM實現ng-keyup事件

有內容時,失去焦點也不會變,無內容時則回到普通狀態,按下回車時,則alert內容:

如何使用AngularJS對動態增加的DOM實現ng-keyup事件

后來我又想了一下,只使用input就可以了,可以修改placeholder的顏色……

關于“如何使用AngularJS對動態增加的DOM實現ng-keyup事件”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

噶尔县| 射阳县| 白水县| 武川县| 中西区| 石景山区| 云龙县| 定远县| 赤峰市| 南岸区| 丰镇市| 安化县| 古交市| 无锡市| 栾川县| 梁平县| 泸水县| 盈江县| 屏边| 太谷县| 溧水县| 乌兰浩特市| 富宁县| 防城港市| 龙州县| 宁国市| 阿鲁科尔沁旗| 长治县| 凤翔县| 福泉市| 靖江市| 大城县| 梧州市| 扎赉特旗| 浪卡子县| 光泽县| 普安县| 班戈县| 云林县| 沙坪坝区| 彰化县|