0

我认为标题不是很适应,但我不知道该放什么。如果需要,请对其进行编辑。

我想要的很奇怪,但请不要投反对票。我想创建自己的函数,该函数将被这样调用:<input type="text" onMyFunction="alert('hi');" />

如果不可能,请告诉它,我将其作为最佳答案进行检查。

PS:如果可行,该函数将被永久调用,并且在该函数中我会if在开头放置一个。

4

3 回答 3

2

您可以使用纯 JavaScript 来做到这一点,但 jQuery 更简单:

<input id="someId" type="text" />

$('#someId').bind('myCustomEvent', function(event) {
  alert('hi');
});

并在代码的其他地方触发它:

$("#someId").trigger('myCustomEvent');

更多信息在这里:http ://dailyjs.com/2009/11/14/jquery-custom-events/

于 2012-05-15T14:31:42.577 回答
1

如果我理解这一点,您希望在调用您的 javascript 函数时发生一些事情。为什么不把你想要发生的事情放在你的实际功能中呢?

<script type="javascript/text">
function MyFunction(){
// some code
alert('hi');
</script>

我不确定您所说的永久调用是什么意思,但在上面的代码中,每次调用您的函数时都会发生一个显示 hi 的警报,类似于您在问题中描述的内容,但使用不同的实现。

至于实际使用 onMyFunction="alert('hi')",我不相信这是可能的,因为 onClick、onload 和 onmouseover 事件是内置的。所以除非你编写正确实现 onMyFunction 的额外代码,否则我不会没有办法做到这一点。

于 2012-05-15T14:31:29.380 回答
1

您遇到的问题是浏览器没有意识到它是其中的一个功能。它是一个字符串,使它成为函数的唯一方法是将其分配为函数。

一种方法是在文档准备好或加载时,您在文档中查询具有该属性的元素并重新分配它。

HTML

<input id="foo1" type="text" onMyFunction="alert(this.value);" value="1"/>
<input id="foo2" type="text" onMyFunction="alert(this.value);" value="2"/>​

JavaScript

var winLoad = window.onload;
window.onload = function(){
    var i, 
        elem,
        fncStr,    
        elems = document.querySelectorAll("[onMyFunction]");

    if (winLoad) {
        winLoad();
    }

    for (i=0;i<elems.length;i++) {
        elem = elems[i];
        fncStr = elem.getAttribute("onMyFunction");
        elem.onMyFunction = new Function(fncStr);        
    }

    var tb1 = document.getElementById("foo1");
    tb1.onMyFunction();​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
}

此处运行的示例

此代码使用并非所有浏览器都支持的querySelectorAll 。

于 2012-05-15T14:37:46.150 回答