如何使用jquery中的click eventListener将id作为函数的参数传递?

时间:2014-10-15 08:16:32

标签: jquery parameters

<script>
$( document ).ready(function() {
    //for example item is the button that will be clicked and panelContent is the panel that will be shown
    $('#item').click({param1: '#panelContent'}, toggleObjects);

    // i tried this also and it doesn't work
    $('#item').click(toggleObjects('#panelContent'));
});
var currentObject;
function toggleObjects(theObject) {
    //theObject is the id of the panel 
    if(currentObject===null)
    {
        currentObject=theObject;
        $(currentObject).show();
    }
    if(currentObject===theObject)
    {
        $(theObject).toggle();
    }
    if(currentObject!==theObject)
    {
        $(currentObject).hide();
        currentObject=theObject;
        $(currentObject).show();
    }
    console.log( 'executed!' );
}
</script>

如果我在html中的按钮上放置onclick =“toggleObjects('#panelContent')”它工作正常,但我想使用jquery事件监听器。

我应该如何使用.click事件传递函数以及参数?  或者除了html onclick版本之外还有其他解决方案吗?

请原谅我可怜的英语! 提前感谢您对此事的关注。

2 个答案:

答案 0 :(得分:0)

你想要的是一个内联函数 -

$('#item').click(function() { toggleObjects('#panelContent'); } );

或者定义一个使用特定参数调用toggleObjects函数的新函数 -

var toggleObjectsWithPanelContent = function() {
  toggleObjects('#panelContent');
};
$('#item').click(toggleObjectsWithPanelContent);

你与$('#item').click(toggleObjects('#panelContent'));

关系密切

但是toggleObjects('#panelContent')位实际上是一个函数调用,而不是对函数的引用,所以你实际上是将toggleObjects的返回值传递给click()fn。 (在这种情况下,返回值为undefined)。

答案 1 :(得分:0)

你说得对,但如果你这样写的话

<input type="button " id="item" onclick="toggleObjects('panelContent');" />

使用#传递id而不是 ID。

然后它将在您的脚本中点击函数toggleObjects,接受您传递的参数。 如果你想使用 jQuery click事件处理程序,那么执行以下操作: -

 $("#item").click(function(){
     toggleObjects('panelContent'); 
 });

如果您的按钮是在DOM中动态生成的,请使用点击 event handler,如下所示: -

 $("#item").on('click',function(){
     toggleObjects('panelContent'); 
 });

请记住,不要将id#一起传递。我可以看到你正在将id toggleObject()中的 currentObject 进行比较,我希望这不会以#开头

但是如果 currentObject #开头,那么无论你在HTML中写的是什么都适用于jQuery,而不是做 toggleObjects(&# 39; panelContent&#39); clickon-click EVENT HANDLERS 内,只需在panelContent的开头添加# toggleObjects(&#39;# panelContent&#39;);

谢谢!