简体   繁体   English

onSubmitEditing 从不触发?

[英]onSubmitEditing never fires?

Really simple question, why isn't onSubmitEditing firing when I hit 'Search' on the virtual keyboard?非常简单的问题,为什么当我在虚拟键盘上点击“搜索”时onSubmitEditing没有触发?

Currently there are no errors thrown and the console.log in onSearch() never fires.目前没有抛出错误并且 onSearch() 中的 console.log 永远不会触发。

I'm using the EXPO SDK v.29.我正在使用 EXPO SDK v.29。

import React from 'react';
import { StyleSheet, Text, View, TextInput, ScrollView, Image } from 'react-native';
import { WebBrowser } from 'expo';
import Icon from 'react-native-vector-icons/Ionicons';

import Styles from 'app/constants/Styles';
import Vars from 'app/constants/Vars';

import Menu from 'app/components/Menu';
import MiniMap from 'app/components/MiniMap';

import NewsList from 'app/components/NewsList';

import {get, post} from 'app/helpers/api';


 export default class HomeScreen extends React.Component {

    static navigationOptions = ({ navigation }) => {
        return {
            headerTitle: (<Image style={{width: 132, height: 30}} source={require('./../../assets/images/header_image.png')}/>)
        };
    };

    constructor(props) {
        super(props);

        this.state = {
            menu: [],
            loadingMenu: true,
            searchString: '',
        };
    }

    onMenuPress = (item) => {
        let next;
        let route = item.page_type.slice(4);

        if(route == "PageExternal") {
            WebBrowser.openBrowserAsync(item.page.url);
        } else {

            data = item.page;

            if(item.children.length > 0) {
                route = 'Menu';
                data = item.children;
            }

            this.props.navigation.navigate(route, {
                data: data,
                title: item.title
            });
        }
    }

    onSearch = (e) => {
        console.log('onSearch', e);
        //WebBrowser.openBrowserAsync('https://www.1177.se/Halland/Sok/?q=Diabetes&submitted=true');
    }

    async componentDidMount() {

        console.log('Eat my shorrs');
        menuitems = await get('content/menu');

        this.setState({
            menu: menuitems,
            loadingMenu: false,
        })

        //this._getMenu();
    }

    render() {

        return (
            <ScrollView style={Styles.whiteBackground}>
            <View style={[Styles.blueBackground, Styles.topPadding, Styles.horizontalPadding]}>
                    <View style={[Styles.searchBox, Styles.bottomMargin]}>
                        <View style={Styles.searchField}>
                            <TextInput
                                style = {Styles.searchInput}
                                placeholder = "Sök sjukdom/behandling"
                                onSubmitEditing = {(e) => (this.onSearch(e))}
                                underlineColorAndroid = "transparent"
                                returnKeyLabel = "Sök på 1177"
                                returnKeyType = "search"
                            />

                            <Icon style = {Styles.searchIcon} name = "ios-search" size={18}/>
                        </View>

                        <Text style={[Styles.searchLabel]}>Söksvaren kommer från 1177.se</Text>
                    </View>

                    <Menu
                        data={this.state.menu}
                        loading={this.state.loadingMenu}
                        style={Styles.topPadding}
                        onItemPress={this.onMenuPress}
                    />
                </View>

                <Text style={[Styles.h1, Styles.blackText, Styles.horizontalPadding]}>Hitta till oss</Text>
                <MiniMap navigation={this.props.navigation}></MiniMap>


                <Text style={[Styles.h1, Styles.blackText, Styles.horizontalPadding]}>Nyheter</Text>
                <NewsList navigation={this.props.navigation}></NewsList>

            </ScrollView>
        );
    }
}
<TextInput
    onSubmitEditing = {(event) => (this.onSearch(event.nativeEvent.text))}
    multiline={false}
/>
  • It does not work when multiline={true} is specified, perhaps your styles has that.指定multiline={true}时它不起作用,也许您的样式有。 See Documentation查看文档
  • You will find your text with event.nativeEvent.text您将使用event.nativeEvent.text找到您的文本

Try changing尝试改变

onSubmitEditing = {(e) => (this.onSearch(e))}

to

onSubmitEditing = {this.onSearch}

Then keep然后保持

onSubmitEditing = {(e) => this.onSearch(e)}

like this and try by changing the function like below像这样并尝试更改如下功能

function onSearch(e) {
    console.log('onSearch', e);
    //WebBrowser.openBrowserAsync('https://www.1177.se/Halland/Sok/?q=Diabetes&submitted=true');
}

Hope this will work希望这会奏效

Check this out看一下这个

https://snack.expo.io/@raajnadar/submit-text-input https://snack.expo.io/@raajnadar/submit-text-input

Render method渲染方法

render() {
    return (
      <View style={styles.container}>
        <TextInput
          placeholder="Sök sjukdom/behandling"
          onSubmitEditing={this.onSearch}
          underlineColorAndroid="transparent"
          returnKeyLabel="Sök på 1177"
          returnKeyType="search"
          style={{ width: '100%', textAlign: 'center' }}
        />
      </View>
    );
}

On submit function关于提交功能

onSearch() {
  console.log('onSearch')
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM