Ошибка JavaScript неопределенной строки - PullRequest
2 голосов
/ 28 мая 2010

Я хочу передать параметр javascript functiona, который является строкой. Эта функция javascript является подсказкой при наведении мыши.

и строка, которую я использую, выглядит следующим образом:

Подол отделка: каждая сторона / край (1/2 " до 2 ") баннера складываются и склеенный (специальный виниловый раствор) или тепло нажат. Это самый распространенный и лучший вариант отделки.

Сшитая отделка: каждая сторона / край (1 " до 2 ") баннера складываются в назад и прошито / сшито белым нить. Это не распространенный вариант, так как Нить можно увидеть на баннере.

Теперь в подсказке на указателе мыши указанный выше текст должен отображаться так же, как он отображается выше вместе с разрывом абзаца. Но когда я передаю вышеупомянутый параметр в этой функции вместе с добавлением некоторых обратных косых черт, чтобы распознать пунктуацию, все до тех пор, пока я не получаю ошибку JavaScript неопределенной строки ...

Я делаю это:

onMouseover="showhint('Hemmed Finish\: Every side/edge \(1/2\'\' to 2\'\'\) of the banner are folded and glued \(special vinyl solution\) or heat pressed. This is the most common and best finish option.Stitched Finish\: Every side/edge \(1\'\' to 2\'\'\) of the banner are folded in the back and stitched/sewed with white thread. This is not a common option as thread can be seen on the banner', this, event, '250px')"

Пожалуйста, помогите мне решить проблему ...

Ответы [ 5 ]

4 голосов
/ 28 мая 2010

Хорошо, у меня есть решение:

<element onMouseover="showhint('&lt;p&gt;Hemmed Finish: Every side/edge (1/2&quot; to 2&quot;) of the banner is folded and glued (special vinyl solution) or heat pressed. This is the most common and best finish option.&lt;/p&gt;&lt;p&gt;Stitched Finish: Every side/edge (1&quot; to 2&quot;) of the banner is folded in the back and stitched/sewed with white thread. This is not a common option as thread can be seen on the banner&lt;/p&gt;', this, event, '250px')" />

Вы должны выйти из кавычек в стиле XML, используя &quot;.

См. Рабочий пример здесь .

1 голос
/ 28 мая 2010

Хотя пример работает для меня, он довольно уродлив. Избегайте встроенных обработчиков событий и безумных проблем с ними. Поместите данные в другое место, например, в переменную JS или значение атрибута, где это необходимо. Для всплывающей подсказки лучше всего подходит атрибут title:

<span title="Hemmed Finish: Every side/edge (½″ to 2″) of the banner are folded and glued (special vinyl solution) or heat pressed. This is the most common and best finish option.&#10;&#10;Stitched Finish: Every side/edge (1″ to 2″) of the banner are folded in the back and stitched/sewed with white thread. This is not a common option as thread can be seen on the banner.">
    finish options...
</span>

Хотя это работает как всплывающая подсказка сама по себе, вы можете использовать прогрессивное улучшение, чтобы заменить эту подсказку в HTML-коде скриптовой, если хотите, например. более гибкий стиль, который идет с этим:

var spans= document.getElementsByTagName('span');
for (var i= spans.length; i-->0;)
    if (spans[i].title)
        replaceTitle(spans[i]);

function replaceTitle(element) {
    var title= element.title;
    element.title= '';
    element.onmouseover= function(event) {
        showhint(title, this, event||window.event, '250px');
    };
    element.onmouseout= function(event) {
        hidehint(...);
    };
}
1 голос
/ 28 мая 2010

Я вижу две потенциальные проблемы здесь.

  1. JavaScript, как и многие другие языки программирования, использует «символ для обозначения начала и конца строки. Ваш текст подсказки содержит« », поэтому, когда JavaScript встречает его, он думает, что ваша строка завершилась. Чтобы решить эту проблему, вы должны ссылаться на каждое "в вашей строке как \". Это говорит JavaScript, что вы не намерены заканчивать строку, а скорее планируете поместить «внутри вашей строки.

  2. Аналогично, JavaScript не позволяет размещать «разрыв абзаца» непосредственно внутри строки. Вместо этого вы должны вводить \ n каждый раз, когда вы хотите возврат каретки внутри вашей строки.

Итак, вот как вы должны определить строку hintbox:

hintbox = "Hemmed Finish: Every side/edge (1/2\" to 2\") of the banner are folded and glued (special vinyl solution) or heat pressed. This is the most common and best finish option.\n\nStitched Finish: Every side/edge (1\" to 2\") of the banner are folded in the back and stitched/sewed with white thread. This is not a common option as thread can be seen on the banner.";

Обычно это называется "экранированием строк", и быстрый Google должен дать вам гораздо больше информации о топике.

Счастливого программирования!

1 голос
/ 28 мая 2010

Проверьте это:

onMouseover="showhint('Hemmed Finish: Every side/edge (1/2\'\' to 2\'\') of the banner are folded and glued (special vinyl solution) or heat pressed. This is the most common and best finish option.Stitched Finish: Every side/edge (1\'\' to 2\'\') of the banner are folded in the back and stitched/sewed with white thread. This is not a common option as thread can be seen on the banner', this, event, '250px')"

вам не нужно убегать: скобки типа (

<script type="text/javascript">
<!--//
function alert2()
{
alert ("Don't forget the curly "+
"brackets - \nThey are essential!");
}
//-->
</script>
0 голосов
/ 28 мая 2010

Вы должны экранировать "символы". Поэтому вместо "использовать \" (обратная косая черта). Вы можете использовать символ новой строки для создания абзаца \ n или если ваша подсказка способна отображать html, используйте

или
для параграфов.

Предлагаю вам также ознакомиться с подсказкой jquery Подсказка .

...