2016-09-13 114 views
-2

嘿所以我試圖將目標中的所有元素都定位到某個類。我有一個問題讓查詢更改函數觸發。所以我嘗試了很多東西,但仍然沒有開火。當我加載頁面時,它會在一開始就會觸發,但從不在它之後,並且我收到一條錯誤消息,說'這個'沒有改變功能。但是,當我記錄這是什麼,它清楚地顯示它是一個複選框。無論如何,任何幫助將不勝感激,因爲這應該是一件非常容易的事情,我想我錯過了一些小事。爲什麼我的jquery更改事件不會觸發?

 $(".rcbCheckBox") 
      .each(function() { 
        console.log(this); 
        this.change(console.log("Changed")); 
       }); 
     }); 
+0

'this'是JS的範圍內引用,不是元素......這將是:'$(本)' –

+0

酷...除此之外,儘管在加載後更改複選框時它仍然不會觸發。 – Seamy

+1

嘗試'$(document).on(「change」,「.rcbCheckBox」,function(){your code});'因爲您的代碼沒有收聽任何事件... –

回答

5

你打電話this.change將返回undefined,因爲change是一個jQuery功能。爲了得到這個工作使用:

$(this).change(function(){console.log(this)}) 
+0

謝謝....我知道我在做一些愚蠢的事情......感謝 – Seamy

+0

因此,它仍然沒有多次發射...再次它只是當我加載頁面時發射,但從來沒有當我改變複選框? – Seamy

+0

您需要將一個函數作爲參數傳遞給更改方法。 – brianyang

1
$(".rcbCheckBox") 
     .each(function() { 
       console.log($(this)); 
      }); 
    }); 

使用$(本),而不是這個。

演示:https://jsbin.com/niqefe/2/edit?html,js,console,output

+0

所以它還沒有發射超過一次...當我加載頁面時,它只會觸發,但從來沒有當我改變複選框? – Seamy

+0

我做了一些演示:請檢查此bin一旦希望這有助於:https://jsbin.com/niqefe/2/edit?html,js,console,output – KrishCdbry

+0

'$(this).change(console.log(「Changed 「));'沒有意義 – charlietfl

0

change()功能是jQuery的API的一部分。普通DOM對象不包含jQuery的函數。您可以創建一個新的jQuery對象傳遞一個DOM對象jQuery的funcion:

var checkbox = jQuery(this); 

或者,通過短:

var checkbox = $(this); 

此外,您的代碼將作爲處理程序change事件什麼console.log("Changed")回報,這不是一個功能。

你應該做這樣的事情

$(this).change(function(){ console.log("Changed"); }); 

此外,尋找出語法錯誤。在你的例子中你有一個額外的});。考慮到之前的所有提到的,你可以嘗試像:

$(".rcbCheckBox").each(function() { 
    console.log(this); 
    var checkbox = $(this); 

    var callback = function(){ 
     console.log("Changed"); 
    } 

    checkbox.change(callback); 
}); 
+0

因此,它仍然不會發射多次...再次只在我加載頁面時觸發,但從未在更改複選框時觸發。 – Seamy

+0

@Seamy,我更新了答案,考慮到你的評論 – Sam

+0

根本不需要使用'each'這個 – charlietfl

相關問題