views:

93

answers:

3

I'm having some trouble with some javascript. I'm using jQuery to dynamiclly add rows to a table. Additionally the javascript is being generated from some PHP and Kohana code.

Here is the script.

<script type="text/javascript">   
    function delExtensionNumber(element){
        $(element).prev().attr('value', 'X'); 
        $(element).parent().parent().hide();
    }

    function addExtensionNumber(){
        lines = <?php echo form::dropdown($ext_id."[did]", $lines, ''); ?>;
        extensions = <?php echo form::dropdown($ext_id."[extension]", $phones, ''); ?>;

        $('#line-extensions > tbody:last').append('<tr><td>'+lines+'</td><td>'+extensions+'</td><td><input type="hidden" name="'+<?php echo $ext_id;?>+'[state]" value="0" /><a class="hide" onclick="delExtensionNumber(this)"></a></td></tr>');

        <?php $ext_id++; ?>
    }
</script>

This works fine in Firefox. But in IE and Chrome it doesn't work. Nothing happens in google Chrome. In IE I get an error on the page. The error is a syntax error. It doesn't like the < character after the word line.

Ok, so I thought I better put some quotes around this string. But... when I do that nothing works. How do I do this?

+2  A: 

Chrome does not support XML literal syntax, you can't write e.g. line = <div>foo</div>, you have to enclose the data into a string.

lines = '<?php echo form::dropdown($ext_id."[did]", $lines, ""); ?>;'

could work (and you should possibly also escape ')

mykhal
That's what I thought might work, but actually it doesn't work at all.
Matt H
+5  A: 

I'm just going to assume that form::dropdown is spitting out plain HTML. In Firefox, this is being interpreted with E4X, and then turned back into a string when concatenated. IE and Chrome do not support E4X. To make it work, you could do something like this:

lines = <?php echo json_encode(form::dropdown(...)); ?>;

Edit: The reason it's not working when you're putting quotes around it is because the HTML contains quotes. The code above will escape the quotes correctly.

icktoofay
You are correct, `form::dropdown()` does return a string of HTML.
alex
Frantastic. Not what I would have thought of but that worked great! thanks alot.
Matt H
Actually I was pretty careful with the quotes but i still couldn't make it work. So the json encode version did the job.
Matt H
A: 

I strongly recommend you to use Jquery DOM Creation Plugin

it would be a lot, easier.

GerManson
I don't see why. The HTML is generated by Kohana, and so I don't see why it would be necessary to imitate that function client-side. For all I know, it might rely on something from the database, and would be impossible to implement client-side.
icktoofay
i misunderstood your question.
GerManson