2015-07-04 50 views
0

我正在構建一個從數據庫中隨機填充多行文本的系統,但每行都有一個「保留」按鈕(如水果機),在保留該行時重新生成其他行 - 我使用的是AJAX做到這一點,這一點工作正常。JQuery'hold'按鈕 - toggleClass vs hasClass兼容性問題?

<div id="hold1" class="rememberthis"></div><div id="line1">Foo</div> 
<div id="hold2" class="rememberthis"></div><div id="line2">Bar</div> 
etc... 

我使用jQuery來切換類中的「保持」按鈕,每行 - 例如:

$("#hold1").click(function(){ 
     $('#hold1').toggleClass("lineselected"); 
    }); 

於是,我試圖查詢是否HOLD鍵有「lineselected 「class - 作爲阻止JQuery AJAX .load函數重新加載內容的一種方式 - 從而」控制「該特定行。 #recycle是重新載入所有內容的按鈕。

if(!$('#hold1').hasClass("lineselected")){ 
$('#recycle').click(function(){ 
    $("#line1").load("index.php #inline1"); 
}); 
} 

...但它不工作!

最高位的作品 - 「中選」類很好地切換。另外,如果我將hasClass()硬編碼到原始加載的東西上(比如「rememberthis」),它就可以工作。所以這兩個JQuery的獨立工作...他們只是不會工作在一起 ...

任何想法,這可能會出錯?

非常感謝提前!

+0

提供有關您發佈的代碼的更多上下文。你如何/何時打電話? –

回答

0

這基本上是因爲你的元素ID是「#hold1」而不僅僅是「hold1」。
因此$('#hold1')找不到該元素。

+0

JQuery Id選擇器需要#char。請參閱[這裏](https://api.jquery.com/id-selector/) –

+0

非常感謝您的回覆Curious Sam - 對於混淆的道歉 - 我編輯了包含正確代碼的問題,沒有#'秒。 – Cinehacker

0

而不是

if(!$('#hold1').hasClass("lineselected")){ 
    $('#recycle').click(function(){ 
     $("#line1").load("index.php #inline1"); 
    }); 
} 
// probably same code repeats for #hold2, #hold3, etc 

嘗試

$('#recycle').click(function(){ 
    if(!$('#hold1').hasClass("lineselected")){ 
     $("#line1").load("index.php #inline1"); 
    } 
    // you should repeat for #hold2, #hold3 here 
}); 

它所做的是在這裏放,如果檢查的單擊事件。

在您的原始代碼中,$('#recycle').click被稱爲多次。這實質上將點擊事件綁定到#recycle多次。您可能忘記解開這些事件(在這種情況下,我認爲找出並解除它們並不容易),然後再進行下一次檢查。所以它不起作用。

我的答案建議您將條件檢查放入click事件處理程序中,並且只綁定一次。