在JS中将一个元素的事件处理程序附加到另一个元素中

时间:2011-09-23 02:41:10

标签: javascript jquery

让我说我有这个部分。

<input id="text1" type="text" name="text1" onchange="alert('valueA');" /><br />
<input id="text2" type="text" name="text2" /><br />

我想要做的是获取input =“text1”的onchange事件处理程序并附加到另一个元素的事件“text2”。 到目前为止,没关系。我可以获得输入“text1”的DOM0 hanlder并将其作为DOM2附加到文本2。

_handler= $('#text1')[0].onchange;
            $('#text2').change(function (event) { 
            if (typeof _handler=== "function") {
                        _handler.call(this, event); 
            }

但是,问题是,我想在附加到“text2”之前更改/添加一些js代码。 例如,在附加到“text2”之前,我想要更改“alert('valueA');”进入“警报('valueA.This is text2')”; 我怎样才能做到这一点?
警告声明只是示例,请不要给出解决方案,例如将警报消息存储到全局变量中,显示变量的值......等等。

感谢。

2 个答案:

答案 0 :(得分:1)

这不可能。您无法更改函数内的代码。

虽然Javascript函数是可变对象,但您只能向它们添加属性和方法,但是您无法更改其中的代码。


如果你想使用邪恶的eval(正如你在评论中指定的那样),你可以将函数转换为字符串,替换函数中你想要的任何文本,然后评估它: / p>

$('#text2').change(function (event) { 
    eval(
        '(' + $('#text1')[0].onchange.toString().replace('valueA', 'valueB') + ')()'
    );
});

这是小提琴:http://jsfiddle.net/A4w2W/

但是,请请不要这样做。这是编写代码的最糟糕方式,永远 !!
你应该认真重新考虑你对这件事的处理方法。

答案 1 :(得分:-1)

从技术上讲,没有。但还有其他解决方案。

<script type="text/javascript">
<!--
alertvalue = "valueA";
//-->
</script>
<input id="text1" type="text" name="text1" onchange="alert(alertvalue);" /><br />
<input id="text2" type="text" name="text2" /><br />
<script type="text/javascript">
$('#text2').change(function(event) {
        alert(alertvalue + '. This is text2');
});
</script>