jQuery(\'a#add_media\').click(function() {
input_code = \'<p>\' +
\'<input id="upload_image-\' + i + \'" type="text" size="36" name="upload_image" value="" />\' +
\'<input id="upload_image_button-\' + i + \'" type="button" value="Upload Image" />\' +
\'</p>\';
jQuery(input_code).appendTo(\'#upload_wrapper\');
i++;
});
jQuery(\'[id^="upload_image_button"]\').click(function() {
...
});
好吧,这是你的基本问题。
代码的第一位向add\\u media链接上的click处理程序添加了一个函数,这将向页面添加另一位输入HTML代码。
代码的第二位向以upload\\u image\\u按钮ID开头的任何内容的click处理程序添加了一个函数。
问题是您误解了javascript在DOM中的工作方式。
在运行上述代码时,只发生了两件事:a)a#add\\u media按钮正在修改其单击处理程序,b)DOM中以upload\\u image\\u按钮开头的任何元素正在修改其单击处理程序。
但是,稍后添加的输入还不在DOM中。它们不作为页面上的元素存在。。。然而因此,当您稍后将它们添加到页面时,它们没有经过修改的单击处理程序。
jQuery()。click()是对DOM的直接修改。它正在修改指定的元素,但不具有追溯力。稍后向页面添加内容并不会使时间神奇地颠倒,也不会将功能添加到添加到页面的新元素中。
要修复它,您需要修改代码,使其在将新创建的元素附加到upload\\u包装器之后,也将单击处理程序添加到新创建的元素中。
此外,您的输入都有相同的name=“upload\\u image”位,如果您稍后试图保存生成的信息,这将不起作用。由于PHP数组处理,name=“upload\\u image[]”仍能正常工作。