2013-12-14 63 views
0

我想创建一个函数,然后用onclick方法使用,例如:Javascript - 使用onclick的函数?

one = document.getElementById("oneID"); 

然后,而不是写功能的每个onclick():

one.onclick = function(x) { 
    tempStack.push(parseFloat(one.value)); 
    viewTemp.value += one.value; 
} 

我想用一个单一的功能:

one.click = input(one); 

但我不知道如何以正确的方式做到这一点,例如下面我试过,不起作用:

var input = function(x) { 
     tempStack.push(parseFloat(x.value)); 
     viewTemp.value += x.value; 
} 

最后,没有外部JavaScript库来帮助这个问题,香草JavaScript。

+0

可能的重复[Javascript .onc lick = functionName传递参数](http://stackoverflow.com/questions/19546480/javascript-onclick-functionname-passing-parameters) – Quentin

+0

对每个HTML元素的onClick事件调用你的单一方法不是更好吗? –

+1

@ user3102101如果它适合您的需求,接受一个答案。每个人的左边都有一个刻度线。 – Pavlo

回答

0

想想作为普通对象,所以方法是:

function input (event) { 
    // Process the event... 

    // event is my event object 
    // this is the object which trigger the event 
    // event.target is my button 
} 

on.onclick = input; 

您必须将input功能作为一个正常的变量。

函数input将收到一个事件对象作为参数。您也可以参考点击this的按钮。

也许mozilla developer networkthe real w3c site会更好地解释它。

+3

W3Schools是一个可怕的,经常错误的,经常过时的教程/参考站点,根本与W3C无关。 – Quentin

+0

我会接受,谢谢^^。也许你可以推荐我们另一个参考网站? – p2kmgcl

+1

在一般情况下,'this'实际上不是被点击的对象。这是事件发生的对象。 'event.target'是被点击的对象。 (它们可以是不同的,因为元素(尽管不是可能*输入的'')可以具有后代)。 – Quentin

2

你需要传递一个函数作为参考,不能称之为:

one.onclick = input; 

在这种情况下,你将无法传递参数,但可以使用this作为参考在其上发射事件的DOM元素:

function input() { 
    tempStack.push(parseFloat(this.value)); 
    viewTemp.value += this.value; 
} 
0

下面是使用JavaScript的.addEventListener(),提到一个以前的答案,使用this穿过DOM节点元素的inputFunction中使用的方法。

<input type="text" value="64.23" id="bt" /> 

<script> 
    function inputFunction(x) { 
     console.log(x.value); //Console Logs 64.23 
    } 

    var bt = document.getElementById("bt"); 
    bt.addEventListener('click', 
          function(){ 
           inputFunction(this) 
          }, false); 
</script> 

小提琴http://jsfiddle.net/Lhq6t/

-2

好了,只是创建一个含有参数的函数,如:

function setValue(input){ 
    tempStack.push(parseFloat(input.value)); 
    viewTemp.value += input.value; 
} 

然后调用该元素一样的点击功能:

var one = document.getElementById("oneID"); 
one.click = setValue(one); 

祝你好运!

+1

除了重命名功能,你有什么改变? – Pavlo

0

您的需求可以通过以下方式实现:

添加这个方法在你的脚本标签:

function input(x) { 
    /*tempStack.push(parseFloat(x.value)); 
    viewTemp.value += x.value;*/ 

    alert(x.id);  
} 

然后打电话给你的按钮的这种方法onClick事件/锚状:

<input type="button" id="oneID" value="oneID" onClick="input(this);"/> 
<input type="button" id="twoID" value="twoID" onClick="input(this);"/> 
<a href="#" id="threeID" onClick="input(this);">threeID</a> 

参见工作示例:http://jsfiddle.net/Avd5U/1/

+0

您正在通过javascript添加onClick事件,直接将它们添加到您的代码中。 –