Как обрабатывать onClick, а не href <a>

Итак, я использую плагин jquery, и для его правильной работы мне нужно, чтобы кнопка моей книги (в стиле кнопки) находилась внутри тега привязки. Мой компонент реакции выглядит так:

export default class Header extends React.Component {
constructor(props){
    super(props);
    this.state  = {
        showModal: false,
    };
    this.openModal = this.openModal.bind(this);
    this.exitModal = this.exitModal.bind(this);
}


openModal(){
    console.info('hello');
    this.setState(()=> ({showModal: true}));
    return false;
}

exitModal(){
    this.setState(()=> ({showModal: false}));
}

render(){
    return (
        ...

            <li>
                <a id = "navbar-book" href = "#" onClick = {this.openModal} className = "book-button"><span>Book Now</span></a>
            </li>
        ...
             <BookModal 
                showModal = {this.state.showModal}
                exitModal = {this.exitModal}
            />  

    )
}

};

Я не хочу иметь href, но если у меня его нет, мой плагин dropotron не будет работать с ним. Я уже пытался вернуть false из функции в надежде, что href не запустится. Все, что мне нужно, это запустить модальное окно.

Насколько мне известно, вы не можете добавлять функции onClick в html через js-добавленный HTML. Я столкнулся с этим несколько лет назад (около 5-6 лет назад) и вот что сделал из этого. Если вы хотите, чтобы это работало, используйте привязки на стороне javascript, а не на стороне html.

NoobishPro 08.06.2018 18:11

Вы пробовали href = "javascript: void (0)"?

Roy Bogado 08.06.2018 18:11

href = "javascript: void (0)" не работал

Alex Barbulescu 11.06.2018 16:51
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Как насчет того, чтобы заменить его на кнопку?

<button onClick = {this.openModal}>Book Now</button>
Ответ принят как подходящий

Вы можете использовать такую ​​кнопку:

<button onClick = {this.openModal}>Book Now</button>

Но если вам действительно нужно использовать ссылку, вы должны использовать preventDefault в событии клика следующим образом:

openModal(event){
    event.preventDefault();
    this.setState(()=> ({showModal: true}));
    return false;
}

Спасибо, я заменил ее на кнопку и изменил структуру макета, чтобы обойти ее. Раньше я пробовал метод предотвращения по умолчанию, но он не работал.

Alex Barbulescu 11.06.2018 16:51

Другие вопросы по теме