правяраць толькі адзін раз на падзеі націску з JQuery

На кожны клік я паспрабаваў праверыць, калі клас існуе, і калі клас знойдзены, то загрузіце enscroll убудова.
але праблема, пасля таго, як знайсці клас St2-WR || st2 , яго зноў загрузіць enscroll убудова з падзеяй пстрычкі, таму што клас існуе,

я хачу толькі адзін раз загрузкі ўбудовы пасля знаходжання класа.

$('.embtn').delegate(this, 'click', function(){
    var $sec = $(this).closest('.sec'), 
        $parentSection = $sec.closest('.m_ms');

    if($parentSection.hasClass('st2-wr') || $parentSection.hasClass('st2')){
        $('.ms_box').enscroll({
                 showOnHover: true,
                 verticalTrackClass: 'track3',
                 verticalHandleClass: 'handle3'
         });
     }
});
1
якая версія jQuery вы карыстаецеся?
дададзена аўтар A. Wolff, крыніца
@roasted 1.9.1 версіі.
дададзена аўтар jogesh_pi, крыніца

6 адказы

Магчымы фрагмент, калі я зразумеў вашу мэта:

$('.embtn').on('click', function() {
    var $sec = $(this).closest('.sec'),
        $parentSection = $sec.closest('.m_ms');

    if (!$('.ms_box').data('enscroll') && ($parentSection.hasClass('st2-wr') || $parentSection.hasClass('st2'))) {
        $('.ms_box').enscroll({
            showOnHover: true,
            verticalTrackClass: 'track3',
            verticalHandleClass: 'handle3'
        }).data('enscroll', true);

    }
});
3
дададзена
Я рэдагаваў адказ, каб атрымаць правільны сінтаксіс з .on ()
дададзена аўтар A. Wolff, крыніца
Паколькі .on() метад падтрымлівае толькі радок у якасці селектара. Я ніколі не выкарыстоўваю метад дэлегаты (), але на самой справе, я толькі што праверыў у доку, гэта тое ж самае для дэлегата, ён толькі прымае радок у якасці селектара. На самай справе тут, OP робіць памылку, выкарыстоўваючы дэлегат, як гэта просты спосаб звязвання. Ён мог бы змяніць гэта код, каб выкарыстоўваць прывязку/без якіх-небудзь змяненняў, але для яснасці я, хай як гэта. напрыклад $ ( 'embtn') на ( 'націсніце', функцыя() {...}). будзе працаваць так жа тут. На жаль, я ведаю, што я не вельмі зразумела, з гэтым каментарыем;)
дададзена аўтар A. Wolff, крыніца
ваш прыём, дадзеныя() тут проста выкарыстоўваць як лагічны сцяг, гэта лепш, чым ўсталяваць яго так, чым замест таго, каб з дапамогай глабальнай зменнай, спадзяюся, што вы атрымалі ідэю
дададзена аўтар A. Wolff, крыніца
прабачце за няправільны парадак Params з дапамогай дэлегату, абноўлены адказ і я патрэбен кавы :)
дададзена аўтар A. Wolff, крыніца
няма, а вось з дапамогай .Ён() мой код няправільна. Я абнавіў, як .Ён() дэлегацыя прымае толькі «селектар». .Ён() проста новы псеўданім для прывязкі/дэлегаты і жыць, для паслядоўнасці
дададзена аўтар A. Wolff, крыніца
ці ёсць пэўная прычына, якая ляжыць у аснове выкарыстання .Ён() замест .delegate() ??
дададзена аўтар jogesh_pi, крыніца
:) ofcause, але яшчэ адна рэч, я не спрабаваў да .data() <�код /> метад, але ён не працуе, я рэч магчымая прычына ёсць, я ўжо выкарыстаў enscroll() плягін на загрузкі старонкі на іншы элемент, і гэта другі раз, калі я хачу выкарыстоўваць на іншы элемент ?? гэта прычына не працуе гэты код?
дададзена аўтар jogesh_pi, крыніца
OOPPS вялікая памылка мной .. код спраўная @rasted :), thankks
дададзена аўтар jogesh_pi, крыніца
@roasted добрае рашэнне, чаму не выкарыстоўваецца .Ён() метад, калі jQuery версія 1.9.1, замест .delegate() ?
дададзена аўтар user1823761, крыніца

Магчымы фрагмент, калі я зразумеў вашу мэта:

$('.embtn').on('click', function() {
    var $sec = $(this).closest('.sec'),
        $parentSection = $sec.closest('.m_ms');

    if (!$('.ms_box').data('enscroll') && ($parentSection.hasClass('st2-wr') || $parentSection.hasClass('st2'))) {
        $('.ms_box').enscroll({
            showOnHover: true,
            verticalTrackClass: 'track3',
            verticalHandleClass: 'handle3'
        }).data('enscroll', true);

    }
});
3
дададзена
няма, а вось з дапамогай .Ён() мой код няправільна. Я абнавіў, як .Ён() дэлегацыя прымае толькі «селектар». .Ён() проста новы псеўданім для прывязкі/дэлегаты і жыць, для паслядоўнасці
дададзена аўтар A. Wolff, крыніца
Я рэдагаваў адказ, каб атрымаць правільны сінтаксіс з .on ()
дададзена аўтар A. Wolff, крыніца
Паколькі .on() метад падтрымлівае толькі радок у якасці селектара. Я ніколі не выкарыстоўваю метад дэлегаты (), але на самой справе, я толькі што праверыў у доку, гэта тое ж самае для дэлегата, ён толькі прымае радок у якасці селектара. На самай справе тут, OP робіць памылку, выкарыстоўваючы дэлегат, як гэта просты спосаб звязвання. Ён мог бы змяніць гэта код, каб выкарыстоўваць прывязку/без якіх-небудзь змяненняў, але для яснасці я, хай як гэта. напрыклад $ ( 'embtn') на ( 'націсніце', функцыя() {...}). будзе працаваць так жа тут. На жаль, я ведаю, што я не вельмі зразумела, з гэтым каментарыем;)
дададзена аўтар A. Wolff, крыніца
ваш прыём, дадзеныя() тут проста выкарыстоўваць як лагічны сцяг, гэта лепш, чым ўсталяваць яго так, чым замест таго, каб з дапамогай глабальнай зменнай, спадзяюся, што вы атрымалі ідэю
дададзена аўтар A. Wolff, крыніца
прабачце за няправільны парадак Params з дапамогай дэлегату, абноўлены адказ і я патрэбен кавы :)
дададзена аўтар A. Wolff, крыніца
ці ёсць пэўная прычына, якая ляжыць у аснове выкарыстання .Ён() замест .delegate() ??
дададзена аўтар jogesh_pi, крыніца
:) ofcause, але яшчэ адна рэч, я не спрабаваў да .data() <�код /> метад, але ён не працуе, я рэч магчымая прычына ёсць, я ўжо выкарыстаў enscroll() плягін на загрузкі старонкі на іншы элемент, і гэта другі раз, калі я хачу выкарыстоўваць на іншы элемент ?? гэта прычына не працуе гэты код?
дададзена аўтар jogesh_pi, крыніца
OOPPS вялікая памылка мной .. код спраўная @rasted :), thankks
дададзена аўтар jogesh_pi, крыніца
@roasted добрае рашэнне, чаму не выкарыстоўваецца .Ён() метад, калі jQuery версія 1.9.1, замест .delegate() ?
дададзена аўтар user1823761, крыніца

Вы можаце выкарыстоўваць адзін метад

$("#foo").one("click", function() {
  alert("This will be displayed only once.");
});

Іншы спосаб складаецца ў выкарыстанні нейкага вонкавага лагічную зменную, якая паведаміць вам, калі быў загружаны убудова.

1
дададзена
@jogesh_pi см абнаўленне
дададзена аўтар nKognito, крыніца
@jogesh_pi Іншы спосаб складаецца ў выкарыстанні некаторых знешнія пераменнага булева, якое пакажа вам, калі быў загружаны убудова.
дададзена аўтар nKognito, крыніца
адзін метад() не падтрымлівае дэлегаванне
дададзена аўтар A. Wolff, крыніца
@nKognito Апрацоўшчык выконваецца не больш як адзін раз за адзін element.-() , я выкарыстоўваю падзея пстрычкі на кнопцы, што трэба націскаць больш чым адзін раз ..
дададзена аўтар jogesh_pi, крыніца

Вы можаце выкарыстоўваць адзін метад

$("#foo").one("click", function() {
  alert("This will be displayed only once.");
});

Іншы спосаб складаецца ў выкарыстанні нейкага вонкавага лагічную зменную, якая паведаміць вам, калі быў загружаны убудова.

1
дададзена
@jogesh_pi см абнаўленне
дададзена аўтар nKognito, крыніца
@jogesh_pi Іншы спосаб складаецца ў выкарыстанні некаторых знешнія пераменнага булева, якое пакажа вам, калі быў загружаны убудова.
дададзена аўтар nKognito, крыніца
адзін метад() не падтрымлівае дэлегаванне
дададзена аўтар A. Wolff, крыніца
@nKognito Апрацоўшчык выконваецца не больш як адзін раз за адзін element.-() , я выкарыстоўваю падзея пстрычкі на кнопцы, што трэба націскаць больш чым адзін раз ..
дададзена аўтар jogesh_pi, крыніца
(function(self) {
    function enscroll() {
        var $sec = $(this).closest('.sec'), 
            $parentSection = $sec.closest('.m_ms');

        if($parentSection.hasClass('st2-wr') || $parentSection.hasClass('st2')){
            $('.ms_box').enscroll({
                showOnHover: true,
                verticalTrackClass: 'track3',
                verticalHandleClass: 'handle3'
            });
            $('.embtn').off('click', self, enscroll);
        }
    }
    $('.embtn')
        .on('click', self, enscroll)
        .on('click', self, function() {
           //Other click handler executed each time
        });
})(this);
0
дададзена
Можа быць, лепш, таму што апрацоўшчык пстрычкі будзе выконвацца адзін раз і дом дрэва прагледзеў (найбліжэйшы) таксама калісьці ...
дададзена аўтар Hugo Mallet, крыніца
(function(self) {
    function enscroll() {
        var $sec = $(this).closest('.sec'), 
            $parentSection = $sec.closest('.m_ms');

        if($parentSection.hasClass('st2-wr') || $parentSection.hasClass('st2')){
            $('.ms_box').enscroll({
                showOnHover: true,
                verticalTrackClass: 'track3',
                verticalHandleClass: 'handle3'
            });
            $('.embtn').off('click', self, enscroll);
        }
    }
    $('.embtn')
        .on('click', self, enscroll)
        .on('click', self, function() {
           //Other click handler executed each time
        });
})(this);
0
дададзена
Можа быць, лепш, таму што апрацоўшчык пстрычкі будзе выконвацца адзін раз і дом дрэва прагледзеў (найбліжэйшы) таксама калісьці ...
дададзена аўтар Hugo Mallet, крыніца