i have svg elements binding clicks , keyups. if user edits text field on page, updates corresponding text element in svg. , vice versa, if user edits svg, updates corresponding text field in html. using jquery.
a button on page lets user remove svg dom , add different svg in place (asynchronously). new svg has same elements first one, has different graphical design.
after loading second svg, bindings stop working. reinitialize -- unbinding , rebinding -- calling ab.init() below still user can't edit svg. how fix this?
update: .bind()s .delegate()s per @pointy's comment. problem persists. .delegate() syntax valid namespace?
ab = { svgns: "http://www.w3.org/2000/svg" f: { field1: {svg:null, jq:null}, field2: {svg:null, jq:null} }, /* last activated text field */ active: undefined, init: function() { ab.f.field1.jq = $('#id_field_1'); ab.f.field2.jq = $('#id_field_2'); var svg_container = document.getelementbyid('svg_container'); var svg_text_elements = svg_container.getelementsbytagnamens(svgns, 'text'); var length = svg_text_elements.length; for(var i=0; < length; i++) { var e = svg_text_elements[i]; if(e.id) { ab.set_svg_for_text_field(e); } else { var tspans = e.getelementsbytagname('tspan'); for(var j = 0; j < tspans.length; j++) { var t = tspans[j]; ab.set_svg_for_text_field(t); } } } ab.delegate_and_display_text_fields(); }, delegate_and_display_text_fields: function() { = []; $.each(ab.f, function(key, value) { if(value.svg && value.jq){ $('form').delegate('input', 'keyup click', function() { value.svg.textcontent = value.jq.val(); cb.set_active_element(key); cb.active = value; }); $('#svg_container svg').delegate('text', 'keyup click', function() { value.svg.textcontent = value.jq.val(); cb.set_active_element(key); cb.active = value; }); if(value.jq.val()) { value.svg.textcontent = value.jq.val(); } a.push(value); value.jq.parent().fadein(); } }); }, set_svg_for_text_field: function(e) { switch(e.id) { case "field_1": ab.f.field1.svg = e; break; case "field_2": ab.f.field2.svg = e; break; } }, ...
try .live()
it bind events elements match selector , in future. have had similar issues when dynamically hiding , showing elements. jquery live()
Comments
Post a Comment