2015-07-21 44 views
1

這裏的情況:jQuery鏈式函數和「this」:在這個例子中,我的語法不正確?

我有3個button小號

<button type="button" class="job-update-button wp-core-ui button-primary" id="delete-btn">Remove</button> 
<button type="button" class="job-update-button wp-core-ui button-primary" id="update-btn">Update</button> 
<button type="button" class="job-update-button wp-core-ui button-primary" id="add-btn">Add</button> 

input

<input type="hidden" name="jobAction" value="" /> 

value應該涉及id取其button已被點擊。它可能看起來很傻,但這是我整合頁面上的邏輯的方式,以便服務器上的單個腳本可以處理一系列相關的AJAX請求。

  • delete-btn點擊 - >jobAction得到valuedelete
  • update-btn點擊 - >jobAction得到的update
  • add-btnvalue點擊 - >jobAction得到的add

功能value我正在使用click個事件始於

jQuery('.job-update-button').click(function(){ 
    // change the value of the memberAction hidden input based on which member-update-button was clicked 
    jQuery('input[name="jobAction]"').val(jQuery(this).attr('id').substring(0, this.IndexOf('-'))); 

,我試圖找出爲什麼我得到

this.IndexOf不是一個函數。

我的想法是,通過我打電話的時候this.IndexOf('-')this指對象調用substring,這是jQuery(this).attr('id')返回的字符串。

這是錯的嗎?如果是這樣,你能幫我理解爲什麼嗎?是否有一個更有效率和緊湊的方式來執行整個過程?

+0

這不會被綁定到點擊的對象嗎?您不是在點擊處理程序之外創建新的功能。加上錯誤的功能名稱。另外,當你不把它拉入變量時,它很難閱讀。 –

+0

不,這與子串無關。它具有與將它傳遞給jQuery()時的相同的值。由ATTR(「ID」)返回的值賦給變量,做你的串並的indexOf上 – dman2306

+0

「*'this'指調用'substring' *對象」 - 不,就像'this'在'jQuery(this)'不引用調用'.val()'的對象。它作爲參數傳遞,與任何地方調用的函數無關。它綁定到click函數的'function(){'範圍,並引用被點擊的DOM對象。 – Bergi

回答

0

你的jQuery函數是搞砸了所有你需要的是:

$('.job-update-button').click(function(){ 
// change the value of the memberAction hidden input based on which member-update-button was clicked 
    var id = $(this).attr('id'); 
    var value = id.replace("-", " "); 

    $('input[name="jobAction"]').val(value); 

}) 

對於你不需要調用jQuery的速記方式首發簡直是$ 它看起來就像你有一個失控的地方在你的代碼中。更改此:

'input[name="jobAction]"' 

要:

'input[name="jobAction"]' 

Working codepen example

請注意,而不是:

jQuery('.job-update-button').click(function(){} 

我用:

你可以調用jQuery的每次但$更容易。

如果它不是你要找的只是讓我知道,我會修改或刪除。

0

讓我們打破你的代碼了一點,以使其更清晰:

jQuery('.job-update-button').click(function(){ 

    var value = jQuery(this).attr('id').substring(0, this.IndexOf('-')); 

    jQuery('input[name="jobAction"]').val(value); 

}); 

裏面的單擊事件處理程序,this指觸發它的HTML元素。這只是jQuery內部工作的方式(當calling or applying函數時,您可以明確地設置this或'範圍')。

這意味着您正試圖在HTML元素上調用indexOf(注意正確的拼寫),該元素沒有indexOf方法。

另外請注意,大多數人使用的$速記jQuery的方法。

要解決你的代碼,這可能就夠了:

$('.job-update-button').click(function(){ 

    $('input[name="jobAction"]').val($(this).attr('id').replace(/-btn$/, '')); 

}); 

這裏,爲了剔除標識的附加「-btn」部分我用replace方法與Regular Expression

+0

用戶想要ID子字符串加名字撇號不在位 – code

+0

哎呀!已經調整。歡呼@code,沒有看到這個要求。 – shennan

相關問題