所以,我有一个rails应用程序,我在jquery上对.change()
字段的id做recipe_ingredients_attributes_0_quantity
。
然后使用ryan bate的nested forms,我可以添加一个新字段,其id包含时间戳而不是0,如前所示。我的问题是如何在这个新字段中添加.change()
事件?
解决方案:
这就是我所做的。
function add_fields(link, association, content) {
var new_id = new Date().getTime();
var regexp = new RegExp("new_" + association, "g")
$(link).up().insert({
before: content.replace(regexp, new_id)
});
var elemId = "#{association}_attributes_#{new_id}_number"
$('elemId').change(function() {
/* do whatever */
}
}
答案 0 :(得分:1)
您的问题是事件委托吗?
如果,那么这里是JQuery:
//#newElem gets added to DOM sometime after initial page load
$(document).on("change", "#newElem", eventHandlerFxn);
答案 1 :(得分:1)
试试这个
function add_fields(link, association, content) {
var new_id = new Date().getTime();
var regexp = new RegExp("new_" + association, "g")
$(link).up().insert({
before: content.replace(regexp, new_id)
});
/* continuing user3352294's answer */
$(document).on("change", "#newElem"+new_id, eventHandlerFxn);
}
答案 2 :(得分:0)
嵌套表单将使用蓝色打印添加新的HTML内容。因此,不是将事件与id相关联(自动态添加以来您将不知道),而是在特定类上添加事件。所有嵌套字段中的类都是相同的。
答案 3 :(得分:0)
我会做$(document).on("change", function(event){//do whatever here});
只要文档中发生了更改事件,就会触发此操作。我建议将其范围限定在您的表单中,以便您只从表单中获取事件。您想要这样做的原因是因为您将事件绑定到元素,如果元素是动态加载的,则必须在加载元素时将其添加到元素中。如果您不知道元素的id,则可以使用事件委派,因为除非您使用事件对象停止传播,否则所有事件都会冒泡DOM。如果将事件附加到父元素,则除非您阻止默认行为,否则所有子元素事件都将冒泡到父元素。
答案 4 :(得分:0)
我上面写了这个,但我想我会把它放在下面。我根据guest271314的答案计算出来了。这就是我做的。
function add_fields(link, association, content) {
var new_id = new Date().getTime();
var regexp = new RegExp("new_" + association, "g")
$(link).up().insert({
before: content.replace(regexp, new_id)
});
var elemId = "#{association}_attributes_#{new_id}_number"
$('elemId').change(function() {
/* do whatever */
}
}