鍍金池/ 問(wèn)答/HTML/ 為什么有的時(shí)候點(diǎn)擊事件觸發(fā)第二次才執(zhí)行?

為什么有的時(shí)候點(diǎn)擊事件觸發(fā)第二次才執(zhí)行?

function comeBack(comeBack,flag){
    if(this.flag){    
        $(comeBack).css('display','block');
        this.flag = false;
    }else{
        $(comeBack).css('display','none');
        this.flag = true;
    };
};
$('#comeBack').on('click',function(){
    var flag1 = true;
    comeBack('#comeBack .img2',flag1);
});
回答
編輯回答
六扇門

this 一般是在構(gòu)造函數(shù)里邊用,普通函數(shù)慎用。function comeBack(comeBack,flag){} 其中,flag形參傳入函數(shù)就相當(dāng)于函數(shù)內(nèi)的局部變量,直接用就行,不要用this!

2017年6月24日 08:12
編輯回答
終相守

clipboard.png

this.flag? 你再看看,琢磨琢磨

2018年8月15日 12:53
編輯回答
浪婳

你在你的函數(shù)里 console.log(this.flag);
第一次點(diǎn)擊的時(shí)候就沒(méi)有這個(gè)值,所以走 else
執(zhí)行完else this.flag 才賦值為true,所以第二次才走if

2017年3月25日 13:26
編輯回答
愛(ài)是癌

引用傳遞,形參實(shí)參,作用域 建議重新學(xué)習(xí)

2018年9月14日 11:40
編輯回答
過(guò)客

我不加this只執(zhí)行一次,再點(diǎn)擊沒(méi)有效果,我打印flag,flag的值變成了false,但是就是不執(zhí)行else下面的語(yǔ)句。我加this的時(shí)候,第一次點(diǎn)擊走的是else的語(yǔ)句,第二次點(diǎn)擊才是從if語(yǔ)句開(kāi)始執(zhí)行。why???

2017年10月15日 12:31
編輯回答
憶當(dāng)年

每次點(diǎn)擊都初始化var flag1 = true;然后又傳入true;flag參數(shù)永遠(yuǎn)都是true

2018年7月26日 16:13
編輯回答
瘋子范
function comeBack(comeBack,flag){
    //這里用this.flag是給你的window加了flag屬性
    //第一次沒(méi)有初始化,是undefined,走else,else里設(shè)為true,第二次走if
    if(this.flag){    
        $(comeBack).css('display','block');
        this.flag = false;
    }else{
        $(comeBack).css('display','none');
        this.flag = true;
    };
};
$('#comeBack').on('click',function(){
    //這個(gè)flag1是局部變量,每次進(jìn)來(lái)都會(huì)初始化一次,傳進(jìn)去永遠(yuǎn)是true,只執(zhí)行if,不是沒(méi)有效果
    var flag1 = true;
    comeBack('#comeBack .img2',flag1);
});

正確做法:flag放在外面,作為全局變量

//實(shí)際聲明的是window.flag
var flag = true;
//實(shí)際聲明的是window.comeBack,它的this就是window
function comeBack(comeBack){
    if(this.flag){    
        $(comeBack).css('display','block');
        this.flag = false;
    }else{
        $(comeBack).css('display','none');
        this.flag = true;
    };
};
$('#comeBack').on('click',function(){
    comeBack('#comeBack .img2');
});

推薦做法:使用類+css控制

<div id="#comeBack">
    <img class="img2 hidden"></img>
</div>
.hidden {
    display: none;
}
$('#comeBack').on('click',function(){
    $img = $(this).children('.img2');
    if($img.hasClass('hidden')){
        $img.removeClass('hidden');
    }else{
        $img.addClass('hidden');
    }
});

或者data api

<div id="comeBack" data-status="hidden">
    <img class="img2"></img>
</div>
$('#comeBack').on('click',function(){
    $this = $(this);
    status = $this.data('status');
    if(status === 'hidden'){
        $this.children('.img2').css('display', 'block');
        $this.data('status', 'show');
    }else{
        $this.children('.img2').css('display', 'none');
        $this.data('status', 'hidden');
    }
});
2017年1月5日 11:31