2013-01-16 50 views
1

確定,所以我有單選按鈕的元素,我克隆添加按鈕被點擊時此元素;但是,一旦我這樣做,初始元素上的按鈕將被取消選中。我知道爲什麼會發生這種情況,但是一旦我開始實施一項解決方案並沒有達到我的預期。Jquery的xpath的選擇

這裏是我的解決辦法:

//This stores the value of the checked element into a variable before the clone 
    var radioKeep = $('input.event'+(numOfParts-1)+':checked').val(); 

    //Cloned the element passed into the function 
    $(element).parent().clone(true, false).insertAfter($(element).parent()); 

然後我試圖確保使用jQuery和XPath的以下組合的初始單選按鈕重新檢查克隆後。

$('input.event'+(numOfParts-1)+'[@value='+radioKeep+']').attr('checked', 'checked'); 

其結果是,所有無線電元件進行檢查......爲什麼???

在此先感謝。

+0

我也許應該指出,並不是所有的要素實際出現進行確認,僅在源代碼是他們展現檢查=「選中」頁面上的最後單選按鈕,但是並不明顯保持檢查。 –

+0

這很難說,你可以'console.log(radioKeep +' - '+ numOfParts)',這些值是否改變?如果不是,那麼您的選擇器將匹配每個克隆的元素,並且您也永遠不會清除該值,因此該值將始終匹配。似乎這很可能是問題。你能得到一個jsFiddle嗎? – Ohgodwhy

+0

我在試圖找出問題的同時警告了一些值,並且一切都很有道理,我嘗試這樣做。所以,$( 'input.event' +(numOfParts-1)的計算結果爲$( 'input.event0') 和radioKeep計算結果爲正確的值。 –

回答

1

當克隆的元素,新的元素具有相同的值和類如舊元素,那麼你就是在二者的檢查值,但只有一個可以進行檢查,以便最後一個接收檢查。 。首先將修復

$('input.event'+(numOfParts-1)+'[@value='+radioKeep+']').first().attr('checked', 'checked'); 

然而,這仍然不會,如果你正在使用jQuery 1.3.2比新因爲XPath的支持是在1.3.2去除工作時,只要將@

$('input.event'+(numOfParts-1)+'[value='+radioKeep+']').attr('checked', 'checked'); 

現在我們有可能面向未來的問題,你用.attr()設置一個屬性,你真的應該使用.prop("checked", true)代替。

$('input.event'+(numOfParts-1)+'[value='+radioKeep+']').prop('checked', true); 

如果這不能解決您的問題,我會建議張貼示例html和我們可以測試您的代碼的工作函數。由於缺少周圍的功能和缺少html,我在這裏做了很多假設。

+0

謝謝,我沒有提供MOR e代碼,因爲沒有代碼是必需的,你很好地回答了我的問題,謝謝。 –