2011-11-18 96 views
3

我使用自動生成的名稱在頁面中有N個單選按鈕組。如何在單選按鈕的'checked'屬性上調用javascript函數?

我想調用一個javascript函數作爲checked屬性的值。 排除EDIT後,該線(根據不同的返回值,單選按鈕需要被選中或取消選中。)

<input type="radio" name="auto_generated_name" value="some_value" checked="test_check(args);" /> 

以及JavaScript函數是

function test_check(params) { 
    if(conditions){ 
     return true; 
    } 
    else 
     return false;  
} 

但是,這並不工作。無論我分配給'checked'屬性的值是什麼,無論是javascript函數還是任何字符串等,單選按鈕都會被檢查。

我該如何實現目標?

編輯:

<input type="radio" name="auto_generated_name" value="somevalue" onclick="test_check(args)"/> 

4單選按鈕作出的基團。這樣的N個廣播組有這樣的html類名:button_group_1,button_group_2,button_group_3,button_group_4等

'args'需要是這些類(即單選按鈕組)名稱和相應的值(來自value =「 1「,值=」2「,值=」3「和值=」4「)。

將在javascript函數內創建帶有類名和值的cookie。

在頁面刷新時,將檢查與類名匹配的cookie,並根據相應的cookie的存在情況,選中或取消選中單選按鈕。

如何實現這些目標/

+0

試圖接受令人滿意的答案。 args包含單選按鈕組的名稱,以便在javascript函數中,我可以創建一個名爲args並且值等於1的cookie。 –

+0

是否想通過「test_check(args)」控制更改事件?我對嗎 ?我的意思是當試圖檢查它時,你需要調用test_check(args);功能? – erimerturk

+0

@erimerturk,當頁面加載時,checked =「test_check(args)」將觸發javascript函數。如果函數的返回值爲true,則會檢查radion按鈕,如果返回值爲false,則不會檢查它。如果將js函數分配給「已檢查」屬性不是預期的方式,那應該是什麼方式? –

回答

0

試試這個: 在這裏,我的用戶自定義屬性input命名爲groupname。在OP的情況下groupname="<?php echo $radio_button_group_name; ?>"。然後檢查該屬性OP的值可以分配checked屬性值。

<input type="radio" name="r1" groupname="gr1"/> 
<input type="radio" name="r2" groupname="gr2"/> 

$('input:radio').each(function() { 
    if ($(this).attr('groupname') == 'gr1') { 
     $(this).attr('checked', true); 
    } else { 
     $(this).attr('checked', false); 
    } 
}); 
+0

@Istiaque艾哈邁德這將檢查每個「無線電」,它是否被檢查 – thecodeparadox

+0

OP是要求設置單選按鈕的選中屬性,而不是檢查它。 –

+0

@abdullah.abcoder,你會讓你的回覆更容易理解嗎? –

1

假設你正在使用jQuery,使用更改事件:http://api.jquery.com/change/

+0

讓我試試你的建議 –

+0

你注意到有N個無線電buttin羣組嗎? N沒有固定值。根據情況,頁面將具有可變數量的單選按鈕組。 –

+0

爲所有激活的單選按鈕指定一個特定的類名稱,並將其用作選擇器。 – pradeek

0

checked屬性僅僅是一個布爾值,以指示單選按鈕是否應該進行檢查,它不能包含的腳本,或引用一個腳本功能。屬性中的任何值都會導致單選按鈕被檢查。

不知道你用什麼機制來檢查每個單選按鈕 - 我可以看到一個args變量,但不知道這是什麼類型 - 爲你寫一些代碼會很棘手。

如果你可以讓args到值的數組,然後沿着以下線的東西應該爲你工作:

var args = new Array(true,false,true) 

$.each(args, function(index, value) { 
    $("INPUT[type=radio]").eq(index).attr("checked", value) 
}); 

Here's a fiddle來說明我的意思更清晰地

+0

假設沒有「參數」和「參數」存在。 –

+0

如果不存在'args'或'params',那麼你應該怎麼知道要檢查什麼?!?! –

+0

哈哈我說這只是爲了清楚起見。 args包含單選按鈕組的名稱,以便從javascript函數內我可以創建一個名爲args並且值等於1的cookie。類名是自動生成的。如果問題的序列號是k,則類名稱是class_k。這個命名法是用php和php變量完成的,它將被分配給args。實際上,我不會爲args指定任何值,而是以這種方式調用函數:test_check(<?php echo $ radio_button_group_name;?>)。 –

0

檢查這個輸出,有效的參數是'aa'。

http://jsfiddle.net/X7rcC/1

HTML:

<input type="radio" name="auto_generated_name" value="some_value1" checked="bb" /> 

JS:

$(function() { 
    var radios = $("input[type='radio']"); 
    $.each(radios, function(index, value){ 
     var args = value.attributes[1].nodeValue; 
     test_check(args, value); 
    }) 

}); 

function test_check(params, value){ 

    if(params == "aa"){ 
    $(value).attr("checked",true); 
    }else 
    $(value).attr("checked",false); 

} 
+0

看到我的編輯請 –

0

您不能使用checked屬性這種方式,因爲任何的值將是相同的checked=true哪怕只是checked檢查單選按鈕。你應該做的是使用,這將創造checked屬性自定義屬性:

<input type="radio" name="auto_generated_name" value="some_value" needs_check="param"> 

<script> 
    // Do test_check on param for each input 
    $('input:radio').each(function() 
    { 
    var radio = $(this); 
    var param = radio.attr('needs_check'); 

    var condition = test_check(param); 

    radio.attr('checked', condition);  
    }); 

    function test_check(param) 
    { 
    return true or false based on param 
    } 
</script> 
+0

ur html是用於單選按鈕和js是用於複選框..錯誤我想..但是什麼時候將JavaScript代碼執行?在第一次加載頁面?當用戶與單選按鈕隨機交互時,js代碼是否會執行? –

+0

當頁面加載時,就像你想 – Tessmore

+0

我沒有提到,我只想要加載時間功能。我還需要頁面刷新。請參閱編輯 –

0

你的問題實際上可以歸結爲:

如何設置一個複選框的值,當第一次加載頁面? (使用存儲與複選框參數)

關鍵的見解是:

  • 不能存儲參數裏面的功能,並期望它負載自動評估
  • 你可以存儲有關對象的內部data-屬性數據
  • 您可以設置使用的$(document)中的jQuery在頁面加載對象的值。就緒()事件

<script type="text/javascript"> 
$(document).ready(function() {     // this code runs when the page is first loaded 
    var radios = $("input[type='radio']");   // find all of your radio buttons 
    $.each(radios, function(){ 
     var radio = $(this); 
     var param = radio.attr('data-param');  // retrieve the param from the object 
     radio.attr('checked', test_check(param)); // set the value of the radio button 
    }) 
}); 

function test_check(params) { 
    if(conditions){ 
     return 'checked'; 
    } 
    else 
     return '';  
} 
</script> 
+0

讓我試試你的建議 –

+0

你的答案似乎是與Tessmore相同。每當用戶與單選按鈕進行交互時,我都需要執行js函數。而我在談論單選按鈕,而不是複選框。 –

+0

看到我的編輯澄清 –

0

我面臨同樣的問題,我的結論是,不使用「」包含的功能。

正確:

<input type="radio" name="im" id="b1" onclick=alert("hello"); /> 

錯誤:

<input type="radio" name="im" id="b1" onclick="alert("hello");" /> 
相關問題