2015-05-10 459 views
2

我已經做了一個按鈕,切換動作來顯示數據(點擊顯示/隱藏)。JQuery切換功能,JS參數傳遞

這一切都按預期工作,因爲display: none開始隱藏數據,然後每當我點擊它,一旦它出現,第二次點擊隱藏數據。

目標:我試圖與參數name一個多態函數,我會通過讓每一個不同的id可以使用相同的功能,無需一遍又一遍重複相同的代碼。如果有人能夠引導我走向正確的方向,我會非常感激,我認爲答案很簡單,只是看不到它。

問題1.當我實現它下面示出的方式,它需要在第一次嘗試3的鼠標點擊,然後2進行的show/hide的動作。

JS

<script> 
function show_panel() { 
    $(document).ready(function(){ 
      $("button").click(function(){ 
        $("#add_group").toggle(); // div id 
      }); 
    }); 
} 
</script> 

HTML

<button onclick="show_panel()">Add group</button> 
<div id="add_group" style="display: none"> 

注:代碼沒有被包裹在一個函數內按預期工作(1點擊每一個動作):

<script> 
    $(document).ready(function(){ 
      $("button").click(function(){ 
        $("#add_group").toggle(); 
      }); 
    }); 
</script> 

<button">Add group</button> 
<div id="add_group" style="display: none"> 

問題2正確地將id傳遞給函數。

問題1代碼我已經修改了劇本:

Line 2: function show_panel(name) { 
Line 5: $("#".concat(name)).toggle(); // name is the div id I want to pass 

我到目前爲止一直試圖通過id沒有成功

<button onclick="show_panel('add_group')"> ... 
<button onclick="show_panel("add_group")"> ... 
<button onclick="show_panel(add_group)"> ... 

希望這是一個明確的問題。

回答

1

爲了使其更具動態性,請使用button上的data屬性。

HTML:

<button data-id="add_group"> Add Group </button> 

的Javascript:

$(document).ready(function() { 
    $('button').on('click', function() { 
     $('#' + $(this).data('id')).toggle(); 
    }); 
}); 
+0

你必須只使用這麼多的代碼,刪除你的舊代碼 – Tushar

+0

@ConsiderMe ??代碼*是*在函數內部。 – Pointy

+0

我的意思是這個函數沒有附加名稱。 –

1

給該按鈕的屬性來指示哪個<div>應該與有關:

<button class="show-stuff" data-target="add_group">Add Group</button> 

那麼你的處理器可以使用該屬性來查找元素顯示:

$(function() { 
    $(".show-stuff").click(function() { 
    var clicked = this, $clicked = $(clicked), target = $clicked.data("target"); 

    $("#" + target).toggle(); 
    }); 
}); 

data-target屬性值由jQuery通過.data() API提供。

+0

我試過沒有成功應用此。此外,這是完全不同的代碼,從我迄今已能夠生產:) –

+0

@ConsiderMe不幸的是,我不知道你的意思。這不起作用的方式是什麼?有錯誤嗎? – Pointy

+0

@ConsiderMe [這裏是一個jsfiddle來演示。](https://jsfiddle.net/wzj9Ltut/) – Pointy