2017-07-19 60 views
0

我試圖執行如果元素不等於這些,這樣做

$('a').click(function egg (event) { 
    if ($this.is('#home') || $this.is('#art') || $this.is('#con') || $this.is('#port') || $this.is('#m2')) { 

    } else { 
    event.preventDefault(); 
    } 
}); 

我只想要執行「event.preventDefault();」但是,如果元素ID不等於我在if語句中放置的參數,那麼它只會執行「event.preventDefault();」在所有「.a」元素上,我怎樣才能達到我想要得到的結果?

+0

你在哪裏定義'$ this'?還要注意,通過在所有這些元素上使用單個類以及':not'選擇器,可以簡化您的代碼。 –

+0

試試'$(this)',而不是'$ this'。 –

+0

我將它更改爲$(this),但它仍然阻止了我並未嘗試阻止的代碼,但是,謝謝,我起初沒有看到該錯誤 –

回答

1

這可以使相當簡單一點,如果你使用.not()結構從選擇中排除的特定ID,並結合將該ID列表作爲以逗號分隔的列表放入單個選擇器中,而不必具有一系列.is(foo) || .is(bar)...

$('a').not('#home, #art, #con, #port, #m2').click(function(e) { 
 
console.log("e.preventDefault will fire"); 
 
e.preventDefault(); 
 
}); 
 

 
$('#home').click(function() { /* your code here */ }); 
 
$('#art').click(function() { /* your code here */ }); 
 
// ...etc
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a id="home" href="#">home</a> 
 
<a id="art" href="#">art</a> 
 
<a id="con" href="#">con</a> 
 
<a id="port" href="#">port</a> 
 
<a id="m2" href="#">m2</a> 
 
<a id="other" href="#">other</a> 
 
<a href="#">another</a>

你想在#home等環節仍然會被添加爲每個元素一個單獨的單擊事件,就像你可能有它現在的特定功能;他們不會拿起event.preventDefault()

+1

感謝您的幫助!我能解決它。 –

3

入住此...

$(this)是有效的jQuery wrapper.Not $this

$('a').click(function egg(event) { 
    if ($(this).is('#home') || $(this).is('#art') || $(this).is('#con') || $(this).is('#port') || $(this).is('#m2')) { 

    } else { 
    event.preventDefault(); 
    } 
}); 
+0

當我單擊時在頁面上發出「hi」提示任何「.a」元素,除了我的id參數中的元素,但是,它仍然會阻止我的id參數中的元素正常工作。 –

+0

該警報用於測試。你可以刪除它。 – Sankar

0

編輯:改變了功能,創造了所有允許的ID的數組。在此示例中向下滾動以查看a標籤。我真的希望我能幫到你,但這是你想要的嗎?

你去那裏:

var allowed_ids = ['home', 'art', 'con', 'port', 'm2']; 
 
var scroll_speed = 1500; 
 

 
$('a').click(function(e) { 
 
    if ($.inArray(e.target.id, allowed_ids) > -1) { 
 
    $('html, body').animate({scrollTop: 0}, scroll_speed); 
 
    } else { 
 
    alert("invalid! ID is not in Array!"); 
 
    } 
 
    e.preventDefault(); 
 
});
#content{ 
 
    height:1500px; 
 
    background:grey; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="content"> 
 
This is the top! 
 
</div> 
 
<a id="home" href="#">home</a> 
 
<a id="art" href="#">art</a> 
 
<a id="con" href="#">con</a> 
 
<a id="port" href="#">port</a> 
 
<a id="m2" href="#">m2</a> 
 
<a id="other" href="#">invalid</a>

+0

謝謝你的回答!但它仍然沒有執行我的預期代碼。我有一個jquery函數,當這些特定id的元素被點擊時執行,當我嘗試你的代碼時,我沒有執行,它只是當我點擊它時將我帶到頁面的頂部。 –

+0

這是因爲e.preventDefault()在「其他」範圍內。你以前沒有提過這個。應該執行哪些代碼? – hallleron

+0

所有在我的參數中帶有id的元素都有這樣的代碼$('#home')。click(function(){ $('html,body')。animate({scrollTop:0},4000) ; }); –

1
//place all links you want in the if part here 
var goodLinks = ['home', 'art', 'con']; 


$('a').on('click', function(e){ 

    var id = e.target.id; 

    if(goodLinks.includes(id)){ 

    console.log('valid id'); 

    } 
    else{ 
    e.preventDefault(); 

    console.log("invalid id -- else"); 

    } 

}); 
+0

謝謝你的回答!但它仍然阻止了我不想阻止的元素。 –

相關問題