2016-06-18 51 views
-1

我想設置一個元素的名稱和ID被點擊單選按鈕時。爲了避免重複選擇,我試圖將其設置是這樣的:鏈接jQuery函數 - 初級

$("#selectOther").click(function() { 
    $("[field=primaryInput]").attr('id', "modifiedId", function() { 
     $(this).attr('name', "modifiedName"); 
     if ($(this).attr('visible') == "False") { 
      $(this).slideDown('fast'); 
      $(this).attr("visible", "True"); 
     } 
    }); 
}); 

但是,它不工作。看起來ID改變了,但Name不是,執行的其餘部分也不是。有人能幫助我理解如何正確表達這一點嗎?

這裏有一個JFiddle

編輯:在我最後的情況下,我將有一對夫婦,揭示了場,如果它是隱藏的按鈕,和其他人的,將隱藏它,如果它是可見的。這就是爲什麼我不使用.slideToggle()

+0

你有沒有打擾閱讀[文件](http://api.jquery.com/attr/)? – Amit

+0

'attr()'接受一個或兩個參數,一個屬性id(getter)或一個屬性id和一個值(setter)。不知道你期望與它發生什麼。你可以這樣做:'var thing = $(「[field = primaryInput]」); thing.attr('id',「modifiedId」); thing.attr('name',「modifiedName」); ...' – Tibrogargan

+0

請注意,動態更改元素的'id'屬性不是一個好主意。它們旨在成爲不變的。如果您需要知道對元素的更改,請直接使用其他任何屬性。還要注意'field'和'visible'不是有效的屬性,這意味着你的HTML無效。要使用元素存儲自定義元數據,請使用'data- *'屬性:https://developer.mozilla.org/zh-CN/docs/Web/Guide/HTML/Using_data_attributes –

回答

2

看到這個fiddle

$('input[type="radio"]').click(function() { 
    $('input[data="primaryInput"]') 
    .prop('id', this.id) 
    .prop('name', this.name) 
    .val(this.value) 
    .css('display', 'inline-block'); 
}); 

點數:

  1. 你沒有設置你的提琴外部資源(即jQuery的) - 所以你不會永遠得到jQuery函數來執行
  2. 使用自定義屬性data屬性。您可以按照我的方式訪問它們或選擇$(element).data('field')

本示例可幫助您瞭解鏈接是如何工作的。另一條建議是,鏈接只有在下一個被調用的方法接收到前一個方法返回的相同元素時纔有效。如果它改變了,你可以使用end()來獲得以前的狀態。

+0

請注意,您可以使用'this.id','this.name'和'this.value'大大簡化代碼,而不是爲三重數據調用jQuery三次。 –

+0

好一點,將努力在該編輯 – Jonathan

+0

@Adam Starrh注意使用道具代替attr的,參見[丙VS-ATTR](/問題/ 5874652 /道具-VS-attr)使用 – Tibrogargan