Я выполняю две проверки на стороне клиента для события samve. Я определил свои проверки, как показано ниже
btnSearch.Attributes["OnClick"] = "javascript:return prepareSave(); return prepareSearch();"
Псевдокод для
prepareSave():
{
if (bPendingchanges)
{
return confirm('Need to save pending changes first, click OK and loose changes or cancel to save them first')
}
else
{return true}
}
Псевдокод для
prepareSearch():
{
if (bNoSearchText)
{
alert('Please specify search criteria before proceeding')
return false;
}
else
{return true;}
}
Когда я bPendingchanges=false, я никогда не запускал вторую проверку.
Кто-нибудь, кто сможет быстро заметить то, что я здесь упустил? Пожалуйста?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ваш второй отчет return никогда не будет достигнут. Выполнение прекращается после javascript:return prepareSave().
Похоже, вы хотите вернуть истину, если обе функции возвращают истину, поэтому выполните:
btnSearch.Attributes["OnClick"] = javascript: return prepareSave() && prepareSearch();
Почему ответ идентичен трем другим ответам, и только один был отклонен?
Кроме того, я не пытаюсь исправить то, как он прикрепляет обработчик к объекту (что можно улучшить), а просто недостижимый оператор возврата.
Спокойные ребята, спасибо. Теперь я могу вызвать обе проверки. Хорошая вещь.
Это потому, что возврат предотвращает запуск второй проверки. Попробуй это
btnSearch.Attributes["OnClick"] = "javascript:return prepareSave() && prepareSearch();"
"javascript:return prepareSave(); return prepareSearch();"
1) У вас не должно быть "javascript:"
.
2) return prepareSearch(); никогда не будет выполнен, потому что "return prepareSave(); выходит из вашего обработчика событий
Попробуйте "return (prepareSave() && prepareSearch());"
return, как следует из названия, возвращает управление тому, что называется рассматриваемым кодом. Следовательно, все, что находится после оператора возврата
return prepareSave(); return prepareSearch();
// ^^^^^^^^^^^^^^^^^^^^^^^ e.g. this part
никогда не выполняется. Попробуйте return (prepareSave() && prepareSearch());
Этот код выполнит проверку только один раз, когда кнопка настроена. Вы хотите обернуть их анонимной функцией или сделать их строкой.