Javascript 如何将调用click以编程方式触发的参数/参数传递给onchange侦听器
在我的表单中,在一组重复行(动态创建)中,每行上都有一个按钮,允许用户上载一个文件,然后该文件将链接/绑定到该行中的数据Javascript 如何将调用click以编程方式触发的参数/参数传递给onchange侦听器,javascript,jquery,dom-events,jquery-trigger,Javascript,Jquery,Dom Events,Jquery Trigger,在我的表单中,在一组重复行(动态创建)中,每行上都有一个按钮,允许用户上载一个文件,然后该文件将链接/绑定到该行中的数据 head head upload ---- ---- -------- x y <button> a b <button> m n <button> 头上传 ---- ---- -------- xy a b m n 当这些按钮中的任何一个被
head head upload
---- ---- --------
x y <button>
a b <button>
m n <button>
头上传
---- ---- --------
xy
a b
m n
当这些按钮中的任何一个被点击时,我显然可以很容易地确定我在哪一行。假设我在id=“row_2”的行中。我有一个从点击按钮调用的函数
现在我调用$(“#fileUploader”)。单击()
以启动文件选择对话框。当用户选择一个文件并单击“确定”时,将自动调用OnFileUploaderChange()
函数。在该函数中,我获得了文件,现在我需要知道初始按钮来自第2行,以便我可以将其与正确的行链接/关联
摘要:OnButtonClick()
触发OnFileUploaderClick()
这会导致自动触发OnFileUploaderChange()
。我在OnButtonClick()
中有一个值,我需要在OnFileUploaderChange()
中提供该值
我怎么能这么做?!在调用OnFileUploaderClick()
函数时,如何获取我在OnButtonClick()
函数中知道的值,并使其在OnFileUploaderChange()
函数中可用(传递给)
我已经了解了如何通过将$(“#文件上传器”).click()
更改为$(“#文件上传器”).trigger('click',[2])
来将参数传递给onfileuploader()
函数。但是该参数只能在OnFileUploaderClick()
中使用,我需要在OnFileUploaderChange()
中使用它
用户可能会启动上载一个大文件,并且(在仍在上载的情况下)会启动上载另一个较小的文件,以便多个线程同时上载。因此,以任何方式使用globals都不起作用-它必须是一个参数/参数,以避免比赛条件和计时问题
这里有一把小提琴来帮助解释:
使用解决方案编辑:
根据@vincent-d下面的评论和回答(现在标记为正确),我已经修复了我的代码,下面是另一把小提琴,展示了它的工作原理:问题是,在初始气泡之外创建的任何dom对象和事件都不会被调用,这些事件/函数也不会设置任何参数或全局变量 为了解决这个问题,jQuery提供了一个非常好的函数,负责在这些实时创建的对象上创建一个新的调用 左侧的赋值必须是一个包含未来“实时创建”对象的对象,右侧是一个引用这些对象的选择器
var colors=[‘绿色’、‘黄色’、‘蓝色’];
$('.add')。单击(函数(){
设num=Math.floor(Math.random()*3);
var newHtml='line 1单击设置为'+colors[num]+''
$('table tr').append(newHtml);
});
//单击add,它将设置一个新按钮,由于live event调用,单击该按钮它将传递到此函数
函数colo(colorvar){
$('td').css('color',colorvar);
}
//这是呼叫,注意身体是左手的,点击按钮是右手的
$('body')。在('click','clicker',function()上{
//这是指右侧被单击的元素(可以是子元素,请在事件目标处查看更多信息)
colo($('span',this.text());
});
添加
第1行单击以设置为红色
问题是,在初始气泡之外创建的任何dom对象和事件都不会被调用,这些事件/函数也不会设置任何参数或全局变量
为了解决这个问题,jQuery提供了一个非常好的函数,负责在这些实时创建的对象上创建一个新的调用
左侧的赋值必须是一个包含未来“实时创建”对象的对象,右侧是一个引用这些对象的选择器
var colors=[‘绿色’、‘黄色’、‘蓝色’];
$('.add')。单击(函数(){
设num=Math.floor(Math.random()*3);
var newHtml='line 1单击设置为'+colors[num]+''
$('table tr').append(newHtml);
});
//单击add,它将设置一个新按钮,由于live event调用,单击该按钮它将传递到此函数
函数colo(colorvar){
$('td').css('color',colorvar);
}
//这是呼叫,注意身体是左手的,点击按钮是右手的
$('body')。在('click','clicker',function()上{
//这是指右侧被单击的元素(可以是子元素,请在事件目标处查看更多信息)
colo($('span',this.text());
});
添加
第1行单击以设置为红色
我认为没有办法将参数传递给文件上载更改事件的函数处理程序。正如我在评论中提到的,我认为另一种解决方案是对每一行使用唯一的
,以便更改处理程序引用ID。您可以将上载程序设置为隐藏,并使用标签触发单击:
函数OnFileUploaderChange(inputElem){
output.textContent=inputElem.id;
}
input[type=“file”]{
可见性:隐藏;
宽度:0;
}
标签{
背景:#fefefe;
边框:1px纯黑;
填充:0 5px;
}
标题1
标题2
上传
第1排
A.
U
第2排
B
U
第3排
C
U
我认为没有办法将参数传递给文件上载更改事件的函数处理程序。正如我在评论中提到的,我认为另一种解决方案是对每一行使用唯一的
,以便更改处理程序引用ID。您可以将上载程序设置为h