将event .change()添加到新添加的字段

时间:2014-03-11 20:12:11

标签: jquery ruby-on-rails

所以,我有一个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 */
   }
}

5 个答案:

答案 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 */
   }
}