第5節(jié) 鍵盤事件、表單事件、ref獲取dom節(jié)點、數(shù)據(jù)雙向綁定 2019-05-19

一、事件對象

1.1什么是事件對象

在觸發(fā)dom上的某個事件時會產(chǎn)生一個事件對象event,這個對象包含著所有與事件相關的信息。

1.2 e.target

獲取執(zhí)行事件的dom節(jié)點與原js寫法基本類似

/*箭頭函數(shù)*/
getMsg=(e) =>{
    e.target.style.background='red';
    console.log( e.target.getAttribute("aid"));
}
 
 /*調用事件*/
<button aid="btn" onClick={this.getMsg}>事件對象</button>

二、表單事件,獲取表單的值

2.1第一種方式:通過事件對象 e.target.value

(1)具體步驟如下:

  • 監(jiān)聽表單的改變事件 onChange
  • 在改變的事件里面獲取表單輸入的值
  • 把表單輸入的值賦值給對應的state中的變量 this.setState({ age:' 18'})
  • 點擊按鈕的時候獲取state中對應元素的值 this.state.age

(2)DEMO示例:

/*監(jiān)聽改變*/
inputChange=(e)=>{
    console.log(e.target.value);

    //改變值
    this.setState({
        age:e.target.value  //通過事件對象獲取值
    })
}

/*獲取改變的值*/
getInputValue=(e)=>{
    console.log(this.state.age);
}

//調用方式
<h3>2.1 第一種方式:表單事件:獲取表單元素的值,通過事件對象</h3>
<input onChange={this.inputChange}/><button onClick={this.getInputValue}>獲取表單值</button>

2.2第二種方式:使用refs

(1)具體步驟如下:
給標簽元素定義ref屬性
通過refs獲取值,this.refs.msg.value
(2)demo示例

/*監(jiān)聽改變*/
inputChange2=(e)=>{
    let val=this.refs.userAddress.value;
    this.setState({
        userAddr:val  //通過refs獲取
    })
}

/*獲取改變的值*/
getInputValue2=(e)=>{
    console.log(this.state.userAddr);
}

<h3>2.2 第二種方式:表單事件:獲取變單元素的值,this.refs.屬性</h3>
<input onChange={this.inputChange2} ref="userAddress"/><button onClick={this.getInputValue2}>獲取表單值</button>

三、鍵盤事件

鍵盤事件與js中的鍵盤事件效果一致;

3.1 onKeyUp

3.2 onKeyDown

四、雙向數(shù)據(jù)綁定

model改變影響view,view改變反過來影響model;
在vue中通過v-model實現(xiàn)雙向綁定;

五、DEMO完整示例

import React from 'react';

class ClickBindItem extends React.Component{
    constructor(props){
        super(props);

        //定義數(shù)據(jù)
        this.state={
            name:'張三',
            age:'',
            address:'山東省青島市市南區(qū)寧夏路288號軟件園2號樓',
            userAddr:''
        }
    }


    /*箭頭函數(shù)*/
    getMsg=(e) =>{
        alert(this.state.name);
        console.table(e);

        e.target.style.background='red';
        console.log( e.target.getAttribute("aid"));
    }

    /*監(jiān)聽改變*/
    inputChange=(e)=>{
        console.log(e.target.value);

        //改變值
        this.setState({
            age:e.target.value  //通過事件對象獲取值
        })
    }

    /*獲取改變的值*/
    getInputValue=(e)=>{
        console.log(this.state.age);
    }

    /*監(jiān)聽改變*/
    inputChange2=(e)=>{
        let val=this.refs.userAddress.value;
        this.setState({
            userAddr:val  //通過refs獲取
        })
    }

    /*獲取改變的值*/
    getInputValue2=(e)=>{
        console.log(this.state.userAddr);
    }

    render() {
        return(
           <div>
               <h2>一、事件對象</h2>
                <button aid="btn" onClick={this.getMsg}>事件對象</button>
               <br/>
               <br/>
               <br/>
               <br/>
               <h2>二、表單事件</h2>
               <h3>2.1 第一種方式:表單事件:獲取表單元素的值,通過事件對象</h3>
               <input onChange={this.inputChange}/><button onClick={this.getInputValue}>獲取表單值</button>
               <br/>
               <br/>
               <br/>
               <br/>
               <h3>2.2 第二種方式:表單事件:獲取變單元素的值,this.refs.屬性</h3>
               <input onChange={this.inputChange2} ref="userAddress"/><button onClick={this.getInputValue2}>獲取表單值</button>
               <br/>
               <br/>
               <br/>
               <br/>
               <h2>鍵盤事件</h2>

           </div>
        )
    }

}
export default  ClickBindItem;
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • ??JavaScript 與 HTML 之間的交互是通過事件實現(xiàn)的。 ??事件,就是文檔或瀏覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,684評論 1 11
  • 1.事件對象 在觸發(fā)DOM上的某個事件時,會產(chǎn)生一個事件對象event。這個對象中包含著所有與事件有關的信息。 參...
    ksh14閱讀 514評論 0 0
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,311評論 0 17
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標準。 注意:講述HT...
    kismetajun閱讀 28,797評論 1 45
  • React簡介 (1)簡介 React 起源于 Facebook 的內(nèi)部項目,因為該公司對市場上所有 JavaSc...
    魚魚吃貓貓閱讀 1,750評論 1 6

友情鏈接更多精彩內(nèi)容