[英]My jQuery click event only works once
我有一組div(75px x 75px)。 我正在嘗試使用JQ,因此,當您單擊div時,它會變成500px x 500px,如果再次單擊它,它將返回到其原始大小。我可以將其放大,但是它不會響應任何大小我的最新嘗試:
$(document).ready(function () {
$(".option").on("click", function () {
if ($(this).width > ("100px")) {
$(this).css("width", "500px");
$(this).css("height", "500px");
$(this).css("background-color", "#FFB2B2");
$(this).css("background-color", "#FFB2B2");
}
});
$(".option").on("click", function () {
if ($(this).width < ("100px")) {
promt("dumb")
$(this).removeAttr("style")
$(this).css("height", "");
$(this).css("background-color", "");
$(this).css("background-color", "");
}
});
});
我也嘗試過
$(document).ready(function () {
$(".option").on("click", function () {
$(this).css("width", "500px");
$(this).css("height", "500px");
$(this).css("background-color", "#FFB2B2");
$(this).css("background-color", "#FFB2B2");
});
$(".option").on("click", function () {
$(this).off("click");
});
});
我想指出:我創建了一個dblclick事件。 就像一鍵放大一樣,dblclick縮小它。 它的作品,但不是非常用戶友好。
您的問題出在您的if語句中,$。width是一個函數,您正在將其與字符串進行比較。
獎勵當您想一次更改多個CSS屬性時,也可以傳遞一個對象,而不是多次調用CSS。 像這樣:
$(this).css({ width: 500,
height: 500,
'background-color': '#FFB2B2' });
這是解決您的代碼問題的答案。 但是要以一種可以廣泛接受的方式實際實施此方法,請參考切換類名的答案
$(".option").on("click", function () { if ($(this).width() < 100) { $(this).css("width", "500px"); $(this).css("height", "500px"); $(this).css("background-color", "#FFB2B2"); } else { $(this).css("width", ""); $(this).css("height", ""); $(this).css("background-color", ""); } });
.option{ background-color: #888; width: 75px; height: 75px; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="option"></div>
如注釋中所述,應使用$(this).width()。 它總是返回一個以px為單位的整數。 不要嘗試使用字符串來比較數字。 使用字符串比較會產生有趣的結果,因為它會逐個字符地進行比較。
例如:字符串“ 1000”小於字符串“ 5”,因為字符“ 1”按字母順序位於“ 5”之前。
不要在同一元素上創建兩個同時沖突的click()
。 另外$(this).width
應該是$(this).width()
等...
相反,僅使用一個.click()
處理函數,並使用.toggleClass()
在$(this)
clicked元素上切換大型類:
$(".option").click(function(){ $(this).toggleClass("large"); });
.option{ width:100px; height:100px; background: #FFB2B2; transition: 0.3s; -webkit-transition: 0.3s; } .large{ /* Added by jQuery on click */ background: red; width:500px; height:500px; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="option"></div>
附言:現在上述解決方案之后,它是無關緊要的,但是為了以后通知,請使用.css({})
例如:
$(this).css({
width : "500px",
height : 500, // or Number if px are the expected unit
backgroundColor : "#ffb2b2"
});
我會這樣做:
// external.js $(function(){ $('.option').click(function(){ $(this).toggleClass('big'); }); });
/* external.css */ .option{ width:200px; height:200px; background:yellow; } .big{ width:500px; height:500px; background-color:#FFB2B2; }
<!DOCTYPE html> <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'> <head> <meta http-equiv='content-type' content='text/html;charset=utf-8' /> <link type='text/css' rel='stylesheet' href='external.css' /> <script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script> <script src='external.js'></script> </head> <body> <div class='option'>Why do I bother?</div> </body> </html>
如果您嘗試在兩種狀態之間切換,那么toggleClass是一種更為簡潔的方法。
這將簡單地將CSS應用於活動狀態,並在取消選中狀態時將其刪除。 這樣,您不必擔心綁定Click事件的問題。 我做了一個簡單的jsfiddle例如:
$(document).ready(function() {
$( "div" ).click(function() {
$( this ).toggleClass( "grow" );
});
})
感謝您的答復!!! 我終於放下了驕傲,在與我同一個房間里問了一個經驗豐富的家伙。 這就是他所做的,而且效果很好。
$(document).ready(function(){
$(".option").on("click", function () { if ($(this).css("width") != "500px") { $(this).css("width", "500px"); $(this).css("height", "500px"); } else { $(this).css("width", "75px"); $(this).css("height", "75px"); } }); });
嘗試類似:
$('.option').on("click", function() {
$(this).addClass( "isActive" );
$(this).css( "width", "500px" );
$(this).css( "height", "500px" );
$(this).css( "background-color", "#FFB2B2" );
$(this).css( "background-color", "#FFB2B2" );
});
$('.isActive').on("click", function() {
$(this).removeClass( "isActive" );
$(this).removeAttr( "style" );
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.