onclick= "return confirm (" ) " работа с $('.класс").нажмите (функция () {});
у меня есть эта функция, которая отключает ввод после нажатия пользователем:
$('.click-off').click(function () {
var btn = this;
setTimeout(function () { $(btn).attr('disabled', 'disabled'); }, 1);
return true;
});
и у меня есть этот вход с подтверждением javascript:
<input type="submit" class="click-off" onclick="return confirm('Are you sure?');" value="Delete">
даже если я нажму "отмена" в поле подтверждения, $('.click-off').вызывается событие click (), и кнопка становится отключенной.
в $('.click-off').click () используется многими входами, поэтому подтверждение не может быть внутри него.
Как я могу проверить подтверждение возврата в $('.click-off').событие click? Или даже предотвратить $('.click-off').нажмите событие для вызова?
4 ответов
почему вы должны иметь эти части логики быть отдельными в первую очередь? Вот 2 метода, чтобы обойти проблему:
объединить логику в один метод:
$('.click-off').click(function () {
// escape here if the confirm is false;
if (!confirm('Are you sure?')) return false;
var btn = this;
setTimeout(function () { $(btn).attr('disabled', 'disabled'); }, 1);
return true;
});
используйте глобальную переменную (или объект предпочтительно):
var clickOffConfirmed = false;
<input type="submit" class="click-off" onclick="clickOffConfirmed = confirm('Are you sure?');" value="Delete" />
$('.click-off').click(function () {
// escape here if the confirm is false;
if (!clickOffConfirmed) return false;
var btn = this;
setTimeout(function () { $(btn).attr('disabled', 'disabled'); }, 1);
return true;
});
вы должны избегать закрепления действий как с jquery, так и с onclick, в первую очередь потому, что скоро вы будете полностью потеряны в своем коде.
Так, например, вы можете сделать это:
$('.click-off').click(function () {
var r=confirm("Are you sure?")
if (r==true)
{
var btn = this;
setTimeout(function () { $(btn).attr('disabled', 'disabled'); }, 1);
return true;
}
else
{
//nothing to do here
}
});
и удалите событие onclick. Так что у вас все будет в одном месте.
в вашем примере вы дважды подключаетесь к событию click, и они оба увольняются, несмотря на результаты друг друга.
попробуйте захватить поле подтверждения, а затем отключить кнопку.
$('.click-off').click(function () {
var r=confirm("Press a button");
if (r==true)
{
$(this).attr('disabled', 'disabled');
}
else
{
}
});
также удалите onclick
вы можете иметь лучшее из обоих и сохраняет javascript чистым для кода, а не текста языка.
<a href="#" class="click_confirm" data-click-confirm="Warning...">Click Here</a>
<script type="text/javascript">
//<![CDATA[
(function($){
$(document).ready(function() {
$('.click-off').click(function(){
if($(this).data('click-confirm')){
var onClickConfirm = window.confirm($(this).data('click-confirm'));
if(!onClickConfirm){
return onClickConfirm;
}
}
// continue code
});
});
})(jQuery);
//]]>
</script>