2014-03-18 85 views
0

我有一些简单的jQuery代码,它有一个问题。菜单处理函数根本不起作用。在jQuery中定义全局函数

var clicked = false; 
$(document).ready(function(){ 
    $TemplateMenu= $('<p class="paragraph">texxt</p>'); 
    $('.TemplateMaker').click(); 
     this.menuhandler(); 
    }); 
}); 
function menuhandler(){   
    if(clicked == false){ 
     $(this).after($TemplateMenu); 
     clicked = true; 
    } 
    else{ 
     $TemplateMenu.remove(); 
     clicked = false; 
} 

出于某种原因,该功能的工作原理,如果我把它直接内点击()这样的:

$('.TemplateMaker').click(function(){ 
     if(clicked == false){ 
      $(this).after($TemplateMenu); 
      clicked = true; 
     } 
     else{ 
      $TemplateMenu.remove(); 
      clicked = false; 
     } 
    }); 
}); 

什么是错的代码?我是否定义了错误的函数,或者如果函数包含jQuery元素,是否需要特殊的东西? 感谢您的帮助:-)

编辑:

我编辑的代码,包括你的球员的建议,其窗框似乎并没有工作。 代码:

var clicked = false; 
$(document).ready(function(){ 
    $TemplateMenu= $('<p class="paragraph">texxt</p><p class="p2">texxt</p>'); 
    $('.TemplateMaker').click(menuHandler($(this))); 
}); 
function menuHandler(obj){   
    if(clicked == false){ 
     $(obj).after($TemplateMenu); 
     clicked = true; 
    } 
    else{ 
     $TemplateMenu.remove(); 
     clicked = false; 
}} 

我现在诺蒂奇了,jQuery抛出这个“event.returnValue已被弃用,请使用标准event.preventDefault()代替。”,但我不知道它是如何接触到我的脚本。

+1

是什么让你觉得你的常规的普通直函数可以链接到本地​​DOM元素? – adeneo

+4

使用'menuhandler()'而不是'this.menuhandler()'调用它。 – Zhihao

+0

如何知道什么是$(this)? –

回答

1

你可能想要menuHandler函数在有人点击按钮时触发?然后,你可以简单地改变你的代码如下:

$('.TemplateMaker').click(menuHandler); 

编辑: 你基本上有两种选择:

选项1:

你不必通过$(this)改变你代码(如果你选择这种方法,请确保删除menuHandler函数中的参数):

$(document).ready(function(){ 
    $TemplateMenu= $('<p class="paragraph">texxt</p><p class="p2">texxt</p>'); 
    $('.TemplateMaker').click(menuHandler); 
}); 

选项2:

或者,如果你想通过$(this)你可以做这样的事情(保持参数在menuHandler功能,如果你选择这种方式):

$(document).ready(function(){ 
    $TemplateMenu= $('<p class="paragraph">texxt</p><p class="p2">texxt</p>'); 
    $('.TemplateMaker').click(function() { 
     menuHandler($(this)); 
    }); 
}); 
+0

我编辑问题根据您的解决方案 –

+1

看到我更新的答案,这应该工作或创建一个小提琴! – Dieterg

+0

选项2的工作,谢谢。 –

2
$('.TemplateMaker').click(); 
     this.menuhandler(); 
    }); 

尝试更换this.menuhandler();只有menuhandler();如下所示:

$('.TemplateMaker').click(); 
     menuhandler(); 
    }); 

编辑:在回答您的评论。尝试使用这个而不是$(this)在您原始代码的menuhandler()中。

+0

它不工作。 我不知道它会工作,因为我认为它不知道什么是$这是了。 –

+0

尝试在原始代码的** menuhandler()**中使用** this **而不是** $(this)**。 –

+0

这不会解决他的问题。当有人点击'$('。TemplateMaker')'时,他希望调用'menuhandler'。他有两个选项,他可以将'$(this)'引用作为参数调用传递给该函数,或者直接在'click'处理函数内调用该函数。 – Dieterg