прохождение кавычек в функцию JavaScript - PullRequest
2 голосов
/ 06 октября 2011

У меня был стекопоток, помогающий мне с функцией javascript в моем последнем вопросе.Функция создала div, а затем добавила два поля ввода формы во вновь созданный div.Функция взяла 4 аргумента.Одним из которых является значение поля ввода формы.Проблема в том, что если значение равно одной кавычке (апостроф), это нарушает функцию.Я занимаюсь разработкой на PHP и использую jQuery.Я пробовал addlashes (), addcslashes ($ text, '"') и json_encode (), которые отлично работают для двойных кавычек, но не для одинарных. Что я делаю неправильно?

Ссылка-1не работает из-за апострофа. Ссылка-2 работает как есть, со значением «Сода».

Пример:

<?php
$text = "I'm Frustrated";
$text = addslashes($text);
?>
<!DOCTYPE html>
<html>
<head>
    <style type="text/css">
        #item_box1{
            width: 300px;
            margin: 0 auto;
            height: 100px;
            border: 1px solid blue
        }

        #item_box2{
            width: 300px;
            margin: 0 auto;
            height: 100px;
            border: 1px solid red
        }
        .link-button {
            color: rgb(0, 0, 255);
            cursor: pointer
        }
    </style>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.3.js"></script>
    <script type="text/javascript">
        function add_item( code, title, price, divbox )
        {
            var idtag, item_title, item_price, item_code;
            // Generate an id based on timestamp
            idtag = "div_" + new Date().getTime();
            // Generate a new div.
            $( divbox ).append( "<div id=\"" + idtag + "\"></div>" );

            if ( divbox == "#item_box1" )
            {
                item_title = $("<input/>", {
                    type: 'text',
                    name: "box1_item_title[]",
                    value: title
                });

                item_price = $("<input/>", {
                    type: 'text',
                    name: "box1_item_price[]",
                    value: price
                });
                // Show in the document.
                $( "#" + idtag ).append( item_title, item_price );
            }
            else
            {
                item_code = $("<input/>", {
                    type: 'text',
                    name: "box2_item_code[]",
                    value: code
                });

                item_title = $("<input/>", {
                    type: 'text',
                    name: "box2_item_title[]",
                    value: title
                });
                // Show in the document.
                $( "#" + idtag ).append( item_code, item_title );
            }
        }
    </script>
</head>
<body>
    <a class="link-button" onclick="return add_item('xyz', "<?php echo $text;?>", '45.99', '#item_box1');">Add Item to Box 1</a>
    <br>
    <a class="link-button" onclick="return add_item('123', 'Soda', '1.99', '#item_box2');">Add Item to Box 2</a>
    <br>
    <br>
    <div id='item_box1'></div>
    <div id='item_box2'></div>

</body>

Источник страницы заканчиваетсявыглядит так:

<a class="link-button" onclick="return add_item('xyz', "I\'m Frustrated", '45.99', '#item_box1');">Add Item to Box 1</a>

Ответы [ 3 ]

2 голосов
/ 06 октября 2011

В атрибуте onclick ссылки 1 вы используете неэкранированную строку JavaScript в двойных кавычках внутри HTML-атрибута в двойных кавычках. Атрибут onclick в итоге получает значение return add_item('xyz', , а оставшаяся часть открытого тега не является допустимым HTML. Изменение двойных кавычек вокруг тега PHP на одинарные кавычки должно решить эту проблему.

Результирующее определение атрибута будет тогда
onclick="return add_item('xyz', 'I\'m Frustrated', '45.99', '#item_box1');"
Я уверен, что это верно как для HTML, так и для JavaScript.

0 голосов
/ 06 октября 2011

Как сказал @Sam выше, попробуйте сделать следующее:

<a class="link-button" onclick="return add_item('xyz', '<?php echo $text;?>', '45.99', '#item_box1');">Add Item to Box 1</a>

Должно работать нормально.

0 голосов
/ 06 октября 2011

Вы заключаете строку в одинарные кавычки внутри двойных кавычек, поэтому вам не нужно добавлять косую черту. Этот код теперь пытается экранировать символ, который не нужно экранировать.

Либо не добавляйте косую черту, либо не заключайте в одинарные кавычки, например:

<a class="link-button" onclick="return add_item('xyz', '<?php echo $text;?>', '45.99', '#item_box1');">Add Item to Box 1</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...