Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 附加一个元件';将事件处理程序转换为JS中的另一个事件处理程序_Javascript_Jquery - Fatal编程技术网

Javascript 附加一个元件';将事件处理程序转换为JS中的另一个事件处理程序

Javascript 附加一个元件';将事件处理程序转换为JS中的另一个事件处理程序,javascript,jquery,Javascript,Jquery,假设我有这个部分 <input id="text1" type="text" name="text1" onchange="alert('valueA');" /><br /> <input id="text2" type="text" name="text2" /><br /> 但是,问题是,我想在附加到“text2”之前更改/添加一些js代码。 例如,在附加到“text2”之前,我想将“alert('valueA');”更改为“alert('

假设我有这个部分

<input id="text1" type="text" name="text1" onchange="alert('valueA');" /><br />
<input id="text2" type="text" name="text2" /><br />
但是,问题是,我想在附加到“text2”之前更改/添加一些js代码。 例如,在附加到“text2”之前,我想将“alert('valueA');”更改为“alert('valueA.This is text2')”; 我如何才能做到这一点?
alert语句只是一个示例,请不要给出类似将警报消息存储到全局变量、显示变量值等解决方案


谢谢。

这是办不到的。不能更改函数内部的代码

尽管Javascript函数是可变对象,但您只能向它们添加属性和方法,但不能更改它们内部的代码


如果要使用evil
eval
(如注释中所述),可以将函数转换为字符串,替换函数中所需的任何文本,然后对其进行求值:

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

但是,请不要这样做。这是最糟糕的代码编写方式,有史以来

你应该认真地重新考虑你对这整件事的态度。

从技术上讲,没有。但还有其他解决办法

<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>



$('#text2')。更改(函数(事件){ 警报(警报值+'。这是文本2'; });
同意。如果我不直接更改它们呢???我想的是将函数转换成字符串,替换它,再转换回函数。可能吗?类似eval()?我的需求虽然听起来不敏感,但并不像您所想的那么简单。我的onchange事件处理程序可以是任何东西。正如我在问题中提到的,我给出的alert语句只是一个示例。有时,它可能是警报()。有时,它可能是一些表达。然后我的解决方案仍然有效。使用全局变量或在闭包中创建的变量,您可以拥有动态函数。对字符串求值是不切实际的(因为它很快就会变得凌乱),而且很难做到。此外,在许多浏览器中,字符串计算速度很慢。如果您仔细检查我的问题,我已经提到不要给出类似使用全局变量的解决方案。我知道有更好的解决方案,而不是字符串求值。类似于在函数中创建参数,并相应地传递给它以使其表现不同。但是,由于某些原因,我不能应用它。
<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>