Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.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 如何使Onchange函数多次工作?_Javascript_Jquery_Forms - Fatal编程技术网

Javascript 如何使Onchange函数多次工作?

Javascript 如何使Onchange函数多次工作?,javascript,jquery,forms,Javascript,Jquery,Forms,我有一个表单,我有一个按钮,当你点击它时,它会添加一组表单字段。其中一个表单字段是下拉菜单,我有一个功能,当从下拉菜单中选择某个选项时,它会填充另一个表单字段。到目前为止,它适用于页面首次加载时显示的原始表单字段集,但不适用于添加的表单字段集。我如何让它在这两方面都起作用?以下是我的javascript: <script type='text/javascript' src='http://code.jquery.com/jquery-1.5.2.js'> </script&g

我有一个表单,我有一个按钮,当你点击它时,它会添加一组表单字段。其中一个表单字段是下拉菜单,我有一个功能,当从下拉菜单中选择某个选项时,它会填充另一个表单字段。到目前为止,它适用于页面首次加载时显示的原始表单字段集,但不适用于添加的表单字段集。我如何让它在这两方面都起作用?以下是我的javascript:

<script type='text/javascript' src='http://code.jquery.com/jquery-1.5.2.js'>
</script><script type='text/javascript'>
//<![CDATA[ 
    $(function () {
    $('#add').click(function () {
        var p = $(this).closest('p');

        $(p).before('<p> <b>Quantity & Description:<\/b><br><textarea name="QuantityAndDescription" rows="10" cols="60"><\/textarea><br><b>Fabric Source:<\/b> <select name="FabricSource" onchange="changevalue(this.value)"><option value="">Select Fabric Source<\/option><option value="JEC">JEC Fabric<\/option><option value="Other">Other Fabric<\/option></select><br><b>Style# & Name:<\/b> <input type="text" name="Style#andName"><br><b>Fabric Width:<\/b> <input type="text" name="FabricWidth"><br><b>Repeat Information:<\/b> <input type="text" name="RepeatInfo" size="60"><input type="hidden" name="COM Required" /> <\/p><br>');
        return false;
    });
});

function changevalue(val) {
    if (val == "JEC") document.comform.RepeatInfo.value = "Per JEC Pattern";
}
//]]> 
</script>

// 
编辑:

我是通过以下方式实现的:
函数更改值(val)
{
如果(val==“JEC”)
$(“form#comform[name='RepeatInfo']”)val(“根据JEC标准”);
}

而不是我以前拥有的。但现在的问题是,当您选择触发选项时,所有“RepeatInfo”表单字段都会填充“Per JEC Standard”,而不仅仅是与触发选择位于同一组表单字段中的字段。如何使此函数适用于添加的表单字段集,而不使单个选择更改填充每个集合中的所有“RepeatInfo”表单字段?

如果要在移动中添加的元素上工作,则必须使用live()方法

更具体地说

如果您已经使用jQuery来处理click事件,那么也可以使用它来处理更改。例如:

<script type='text/javascript'>

$(document).ready({
    $('#add').click(function () {
    var p = $(this).closest('p');

    $(p).before('<p> <b>Quantity & Description:<\/b><br><textarea name="QuantityAndDescription" rows="10" cols="60"><\/textarea><br><b>Fabric Source:<\/b> <select name="FabricSource"><option value="">Select Fabric Source<\/option><option value="JEC">JEC Fabric<\/option><option value="Other">Other Fabric<\/option></select><br><b>Style# & Name:<\/b> <input type="text" name="Style#andName"><br><b>Fabric Width:<\/b> <input type="text" name="FabricWidth"><br><b>Repeat Information:<\/b> <input type="text" name="RepeatInfo" size="60"><input type="hidden" name="COM Required" /> <\/p><br>');
    return false;
    });

   $(":select").live('change', function(){
      changevalue($(this).val());
     });
   function changevalue(val) {
    if (val == "JEC") document.comform.RepeatInfo.value = "Per JEC Pattern";
   }
});   
</script>

$(文件)。准备好了吗({
$('#添加')。单击(函数(){
var p=$(this).closest('p');
$(p).before(“数量和说明:

面料来源:选择面料来源JEC FabricOther面料
款式和名称:
面料宽度:
重复信息:
”); 返回false; }); $(“:select”).live('change',function(){ changevalue($(this.val()); }); 函数更改值(val){ 如果(val==“JEC”)document.comform.RepeatInfo.value=“每JEC模式”; } });
我还没有测试它,所以检查关闭


K

在动态生成的HTML中,您有以下内容:

<select name="FabricSource" onchange="changevalue(this.value)">
如果这不起作用,可能有更好的方法来处理它,而不是像这样将其内联。然而,我认为这个答案将是您修复并运行它所需的最少工作量


祝你好运

她没有使用jQuery来进行事件处理,它是在她添加的HTML中内联的。这并不意味着她不能使用jQuert进行处理,是的,她必须对新添加的元素使用live()?因此,我看不出给答案打否定的理由。理论上,这也行,但只需要注意一些语法:第一行的
:select
应该用引号括起来,第二行的
this
应该用jQuery括起来,就像
$(this)
。虽然,您可能不想针对页面上的所有选择框,但使用ID可能会更好。@kwicher我没有投反对票。尽管@Funka已经指出了你答案中的一些基本问题。我之所以发表评论,是因为你说的“如果它要在移动中添加的元素上工作,就必须使用live()”是不正确的,因为它们是内联语句。live()当然是一个可能的解决方案,但并没有回答她为什么目前的解决方案不起作用的问题(更不用说@Funka提到的问题了)。我同意我之所以犯了平局错误是因为匆忙。他们现在被纠正了。谢谢你指出它们。
<select name="FabricSource" onchange="changevalue($(this).val())">