Sweetalert: ๋‘ ๋ฒˆ์งธ ์Šค์™ˆ์ด ์‹คํ–‰๋˜์ง€ ์•Š์Œ

์— ๋งŒ๋“  2015๋…„ 01์›” 15์ผ  ยท  19์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: t4t5/sweetalert

์•ˆ๋…•ํ•˜์„ธ์š”,

์ด ๋‹ฌ์ฝคํ•œ ๋ณ€๊ฒฝ ์ „ํ™”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

var self = this; 

swal({
      title              : $.t('modal.clear.title') || "Etes vous sรปr ?",
      text               : $.t('modal.clear.text') || "Le formulaire sera dรฉfinitivement perdu !",
      type               : "warning",
      showCancelButton   : true,
      confirmButtonColor : "#DD6B55",
      confirmButtonText  : $.t('modal.clear.yes') || "Oui, supprimer",
      cancelButtonText   : $.t('modal.clear.no') || "Annuler",
      closeOnCancel      : true
}, function(isConfirm) {
   if (isConfirm){
       // I Use backbone radio event
       self.homePageChannel.trigger('deleteForm', self.currentSelectedForm)
   }
});

์ฝœ๋ฐฑ์—์„œ ๋ฐฑ๋ณธ ๋ผ๋””์˜ค๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
์ด ์‹œ์ ์—์„œ ๋ชจ๋“  ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‚ด ์ด๋ฒคํŠธ ์‘๋‹ต์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋˜ ๋‹ค๋ฅธ ๋‹ฌ์ฝคํ•œ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

formDeleted : function(result) {
        swal({
            title : $.t('modal.deleted.title') || 'Formulaire supprimรฉ !',
            text  : $.t('modal.deleted.text') || 'Votre formulaire a รฉtรฉ supprimรฉ avec succรจs',
            type  : "success",
        });
  },

๊ทธ๋ฆฌ๊ณ  ๋‘ ๋ฒˆ์งธ ๋‹ฌ์ฝคํ•œ ๊ฒฝ๊ณ ๋Š” ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  formDeleted ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์˜ ๋„์›€์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด๊ฒƒ์ด ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” closeOnCancel ๋ฐ / ๋˜๋Š” closeOnConfirm ์„ false ๋กœ ์„ค์ •ํ•˜์—ฌ์ด๋ฅผ ์ •๋ ฌ ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‘ ๋ฒˆ์งธ ๊ฒฝ๊ณ  ์ƒ์ž๊ฐ€ ๋‹ซํžˆ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ swal ํ˜ธ์ถœ์€ true ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  19 ๋Œ“๊ธ€

JSFiddle์—์„œ ์ฝ”๋“œ๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

JSFiddle์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค : http://jsfiddle.net/5pj7wwx9/

๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์ฒซ ๋ฒˆ์งธ sweetAlert๊ฐ€ ํ‘œ์‹œ๋˜๊ณ  ์ฝœ๋ฐฑ์ด ํ˜ธ์ถœ๋˜์ง€๋งŒ ๋‘ ๋ฒˆ์งธ sweetAlert๋Š” ์—†์Šต๋‹ˆ๋‹ค.

setTimeout์œผ๋กœ ์‹œ๋„ํ•œ JSFiddle์—์„œ 2 ์ดˆ ํ›„์— ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ธฐ๊บผ์ด ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ์— ํ•„์š”ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— +1

์ด๊ฒƒ์ด ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” closeOnCancel ๋ฐ / ๋˜๋Š” closeOnConfirm ์„ false ๋กœ ์„ค์ •ํ•˜์—ฌ์ด๋ฅผ ์ •๋ ฌ ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‘ ๋ฒˆ์งธ ๊ฒฝ๊ณ  ์ƒ์ž๊ฐ€ ๋‹ซํžˆ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ swal ํ˜ธ์ถœ์€ true ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋™์ž‘์ด ์•„๋‹ˆ๋ฏ€๋กœ closeOnCancel ๋ฐ closeOnConfirm์˜ ๊ฐ’์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

๋™์˜ํ•˜์ง€๋งŒ closeOnConfirm ์˜ ์˜๋„ ๋œ ๋ชฉ์  ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ƒ์ž๋ฅผ ์—ฌ๋Š” swal ์˜ˆ์ œ (http://tristanedwards.me/sweetalert)์—์„œ๋„ ๊ทธ๋ ‡๊ฒŒ ํ‘œํ˜„ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ํ™•์‹คํžˆ ์ง๊ด€์ ์ด์ง€ ์•Š๋‹ค๋Š” ๋ฐ ์—ฌ์ „ํžˆ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์ €์—๊ฒŒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งŒ๋“  ๋ฐ”์ด์˜ฌ๋ฆฐ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://jsfiddle.net/madhureng/5pj7wwx9/16/

๋‚˜๋Š” API๊ฐ€ ๋‚˜๋ฅผ ์œ„ํ•ด ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ๋ณด๋‹ค ์ˆ˜์ •๋˜๋Š” ๊ฒƒ์ด ๋” ํ–‰๋ณต ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@ maddy2308- ํด๋ฆญ์ด ๋„ˆ๋ฌด ๋งŽ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฐ”์ด์˜ฌ๋ฆฐ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค : https://jsfiddle.net/g8j1acv4/

๋‚ด๊ฐ€ ๋ณ€๊ฒฝ ํ•œ ๊ฒƒ์€ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์„œ๋ฅผ ๊บผ๋‚ด์„œ document.ready๋กœ ๋ณ€๊ฒฝ ํ•œ ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค.

@joenorton์ด ์ง€์ ํ–ˆ๋“ฏ์ด ์ด๊ฒƒ์ด closeOnConfirm: false ๋ชฉ์ ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์กฐ๊ธˆ ์ง๊ด€์ ์ด์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์— ๋™์˜ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด, ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜๊ฒŒ๋˜์–ด ๊ธฐ์˜๋‹ค!

@ maddy2308 , ๋ฐ”์ด์˜ฌ๋ฆฐ์˜ ๋ฌธ์ œ๋Š” $('button') ์ด ๋„ˆ๋ฌด ๋ชจํ˜ธํ•˜์—ฌ swal์˜ ๋ฒ„ํŠผ๋„ ํ˜ธ์ถœ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋„ˆ๋ฌด $('body > button') ๋ณ€๊ฒฝํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋„์ด ๋ฌธ์ œ๋กœ ๊ณ ์ƒํ–ˆ๊ณ , ์ด๊ฒƒ์ด ๋ณ€๊ฒฝ๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

@ t4t5 ์†Œ์Šค ์ฝ”๋“œ๋ฅผ

the first swal is shown at point A in time
the user interacts with the first swal at point B in time
the callback is called and invokes the second swal at point C in time
the active swal is dismissed at point D in time

์ด ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

<strong i="11">@A</strong>: An integer variable is set that increases with every call to swal
<strong i="12">@B</strong>: The current value of the variable is remembered
<strong i="13">@D</strong>: If the variable has changed, do not call swal.close

์ด๋ ‡๊ฒŒํ•˜๋ฉด C ์—์„œ ํ˜„์žฌ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๊ฑฐ์˜ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ์ƒˆ ๋Œ€ํ™” ์ƒ์ž๋ฅผ ์–ผ๋งˆ๋“ ์ง€ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ ํ™•์ธ ์ž‘์—…์— $ timeout์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค (Angular ์‚ฌ์šฉ).
if (isConfirm){ return $timeout(function() { // I Use backbone radio event self.homePageChannel.trigger('deleteForm', self.currentSelectedForm) }, 100); }

์ด ๋ฒ„๊ทธ๋Š” ๋‹ค์Œ ์ƒํ™ฉ์—์„œ๋„ ๋‚˜์—๊ฒŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  1. Angular์—์„œ $http ์š”์ฒญ์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ํ™•์ธ ๋‹ฌ์ฝคํ•œ ์•Œ๋ฆผ์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  2. Chrome์˜ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์—์„œ ์ œํ•œ์„ offline ๋กœ ์„ค์ •ํ•˜์—ฌ $http ์š”์ฒญ ์ฆ‰์‹œ ์‹คํŒจ๋ฅผ ๊ฐ•์ œ ํ•ฉ๋‹ˆ๋‹ค .
  3. $http ์‹คํŒจ์‹œ ์˜ค๋ฅ˜ ๋‹ฌ์ฝคํ•œ ์•Œ๋ฆผ์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ํ™•์ธ ๊ฒฝ๊ณ ๋Š” ์ •์ƒ์ ์œผ๋กœ ํ‘œ์‹œ๋˜์ง€๋งŒ ์˜ค๋ฅ˜ ๊ฒฝ๊ณ ๋Š” ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  : ์ฝ”๋“œ๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด ๋ณด์ง€ ์•Š์•˜์ง€๋งŒ ๊ธฐ์กด์˜ ๋‹ฌ์ฝคํ•œ ์•Œ๋ฆผ์— ๋Œ€ํ•œ ๋‹ซ๊ธฐ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ทจ์†Œํ•˜๊ณ  ์ฆ‰์‹œ ์‚ญ์ œํ•ด์•ผํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋‘ ๋ฒˆ์งธ ์•Œ๋ฆผ์ด ์ •์ƒ์ ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.


ํŽธ์ง‘ : ์˜ˆ์ƒ๋Œ€๋กœ ๋ฌธ์ œ๋Š” ์ฒซ ๋ฒˆ์งธ ๋‹ฌ์ฝคํ•œ ๊ฒฝ๊ณ  ํ™•์ธ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ swal์—์„œ animation ๋ฅผ false๋กœ ์„ค์ •ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜์—๊ฒŒ๋Š” ๋ฒ„๊ทธ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€ ํ•ด๊ฒฐ์ฑ…์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

1st : ๊ธฐ์กด ๊ฒฝ๊ณ ๊ฐ€ ์• ๋‹ˆ๋ฉ”์ด์…˜๋˜๋Š” ๋™์•ˆ ๋‘ ๋ฒˆ์งธ ๊ฒฝ๊ณ ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ํ˜„์žฌ ๊ฒฝ๊ณ ๋ฅผ ์ฆ‰์‹œ ๋‹ซ๊ณ  ์ƒˆ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

2nd : ๋‹ซ๊ธฐ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋๋‚  ๋•Œ ์—ด๋ฆฌ๋Š” ๋‘ ๋ฒˆ์งธ ๊ฒฝ๊ณ ๋ฅผ ํ์— ๋„ฃ์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์†”๋ฃจ์…˜์€ ์ผ์„ ๋” ๋งค๋„๋Ÿฝ๊ฒŒ ๋งŒ๋“ค๊ณ  ์ฒซ ๋ฒˆ์งธ ์†”๋ฃจ์…˜์€ ์˜ค๋ฅ˜ ๋ชจ๋‹ฌ์ด ๋” ๋นจ๋ฆฌ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค!

ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์‹œ๋„ํ•ด ๋ณด ๊ฒ ์ง€๋งŒ, ์ด์ „์—์ด ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ณ ์ณ์•ผ ํ•  ๊ณณ์„ ์•ˆ๋‹ค๋ฉด ๋จผ์ € ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ•ด์ฃผ์„ธ์š”! :)

@ t4t5 ์ œ ๋ณด๊ณ ์„œ์™€ ์†”๋ฃจ์…˜์„ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค. ์Šน์ธํ•˜๋ฉด ์ œ๊ฐ€ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

querySelectorAll ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ชจ๋“  ์š”์†Œ๋ฅผ โ€‹โ€‹๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ๋ฐ˜ํ™˜ ๋œ ๊ฐ’์„ ๋ฐ˜๋ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

var alertBtn = document.querySelectorAll('.js-alert');

for (var i = 0; i < alertBtn.length; i++) {
    alertBtn[i].onclick = function(){
        swal({
            title: "text",
            text: "text text"
            });
    };
}

๋‚ด SweetAlert์— ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, ๋‘ ๋ฒˆ์งธ swal์ด ๋‚˜ํƒ€๋‚˜์•ผ ํ•  ๋•Œ๋„ ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๋‚ด ํ•จ์ˆ˜์— $ timeout์„ ํฌํ•จํ•˜์—ฌ ํ•ด๊ฒฐ ๋œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

function(error) { console.log(error); $timeout(function(){ SweetAlert.error('Erro'); },100) }

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ @PommeVerte์˜ ์†”๋ฃจ์…˜์œผ๋กœ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ถ€๋ชจ swal ()์— closeOnCancel: false ์„ ์„ค์ •ํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

SweetAlert 2.0๋ถ€ํ„ฐ๋Š” SweetAlert๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ closeOnConfirm ๋ฐ closeOnCancel ๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•ฝ์†์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค! :)

SetTimeout์€ ์ฝœ๋ฐฑ ํ›„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฌธ์ œ์˜ ์›์ธ์— ๋Œ€ํ•ด ๋” ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰