Полезная информация

Пользователи не любят читать документацию. Станьте оригинальным, будьте не как все. Ознакомьтесь с нашей базой знаний.

№125-04-2010 06:54:34

julios
Участник
 
Группа: Members
Зарегистрирован: 25-04-2010
Сообщений: 18
UA: Foxware 0.0

Greasemonkey. Функция не принимает больше одного аргумента

Здравствуйте, уважаемые!

Возникла у меня потребность написать скрипт под greasemonkey.

В javascript я не силен, поэтому подобная ситуация вызывает полное недоумение:

Выделить код

Код:

// ==UserScript==
// ==/UserScript==

var logo = document.createElement("div");
logo.innerHTML = '<div>' +

'<script type="text/javascript">function checkcat(cn, mode) {' +
'alert("Значение: " + cn + " Состояние: " + mode);}</script>' +

    '<form>' +
    '<input type=checkbox id=pl_ua name=ua value=9 onclick=checkcat(this.value, this.checked)><label for=pl_ua>Страна</label>' +
    '</form>' +
    '</div>';
document.body.insertBefore(logo, document.body.firstChild);

С помощью этого скрипта я планирую автоматизировать некоторые рутинные операции по заполнению формы.
В данном случае, вместо того, чтобы каждый раз выбирать значения в выпадающем списке <select multiple> я буду хранить их в чекбоксах в своем расширении.
При щелчке на чекбоксе, функция проверяет его состояние и в зависимости от true / falshe будет делать в списке с checked'ом аналогичное действие.

Но для этого мне нужно передать в функцию сразу два параметра: value и checked.
Как только я дописываю в любом месте второй параметр - всё. Т.е. ничего не происходит.

А вот в таком виде работает:

Выделить код

Код:

// ==/UserScript==

var logo = document.createElement("div");
logo.innerHTML = '<div>' +

'<script type="text/javascript">function checkcat(cn) {' +
'alert("Значение: " + cn);}</script>' +

    '<form>' +
    '<input type=checkbox id=pl_ua name=ua value=9 onclick=checkcat(this.value)><label for=pl_ua>Страна</label>' +
    '</form>' +
    '</div>';
document.body.insertBefore(logo, document.body.firstChild);

Помогите, пожалуйста.

Отсутствует

 

№225-04-2010 10:09:35

Lynn
Кофеман
 
Группа: Members
Откуда: Россия
Зарегистрирован: 16-02-2005
Сообщений: 1721
UA: Firefox 3.5
Веб-сайт

Re: Greasemonkey. Функция не принимает больше одного аргумента

М-да. У вас получлось, что у input есть атрибут onclick со значением «checkcat(this.value,» и атрибут со странным названием «this.checked)». Как по вашему браузер должен был догадаться, что на самом деле это одно значение атрибута с пробелом? Правильно, его надо взять в кавычки!

Выделить код

Код:

onclick="checkcat(this.value, this.checked)"

Isn't it ironic... don't you think? — Alanis Morissette

Отсутствует

 

№325-04-2010 11:39:26

julios
Участник
 
Группа: Members
Зарегистрирован: 25-04-2010
Сообщений: 18
UA: Foxware 0.0

Re: Greasemonkey. Функция не принимает больше одного аргумента

Вот спасибо!

Я бы еще думал и думал... мол, скобки круглые там есть.

А вот, если бы, из элементарного уважения к порядку,  я  бы обрамлял значения атрибутов в кавычки, такого бы не произошло.

Разрешите тут задать еще несколько вопросов?

1. В той форме, которую я собираюсь автозаполнять есть два текстовых поля с именами: xfield[source] и xfield[linked] соответственно (для оформления ссылки на источник материала).
Как и подсказывала интуиция, простому

Выделить код

Код:

document.addnews.xfield[linker].value="http://mts.com.ua/"

они не поддаются.
Вот я думаю, может нужно сначала массив объявить?

2. Существует ли возможность вносить изменения в скрипт из этого же скрипта.
Например, скрипт, что я пытаюсь написать, должен хранить довольно большой перечень групп значений, который часто дополняется.
Можно, конечно, редактировать скрипт в моем любимом Winsyntax 2.0 (т.к. он поддерживает utf-8), но хотелось бы так:
заполнил форму -> нажал кнопку "сохранить новый шаблон" скрипта -> скрипт считал значения полей и дописал данные сам в себя.
Это возможно?

Отсутствует

 

№426-04-2010 05:11:07

julios
Участник
 
Группа: Members
Зарегистрирован: 25-04-2010
Сообщений: 18
UA: Foxware 0.0

Re: Greasemonkey. Функция не принимает больше одного аргумента

Первый вопрос решил осуществлением доступа через

Выделить код

Код:

document.getElementById('xfield[linker]').value=link;

Но второй вопрос становиться все более остро: имеется более 200-от групп данных.
Каждая группа как минимум из 5-ти элементов (теги, фрагмент шаблона, название источника, адрес источника).
Хранить это всё непосредственно в коде скрипта, кажется нерациональным.

Как поступить правильно?
Где хранить данные?

Отсутствует

 

№528-04-2010 13:51:07

julios
Участник
 
Группа: Members
Зарегистрирован: 25-04-2010
Сообщений: 18
UA: Foxware 0.0

Re: Greasemonkey. Функция не принимает больше одного аргумента

Попробую хранить, используя DOM Storage.

Отсутствует

 

№628-04-2010 19:09:10

MySh
Кактусогрыз
 
Группа: Extensions
Зарегистрирован: 17-12-2006
Сообщений: 4623
UA: Firefox 3.6

Re: Greasemonkey. Функция не принимает больше одного аргумента

julios
Насколько я помню, некоторые скрипты могли хранить часть данных где-то внутри профиля. Значит, наверное, можно. Скорее всего, это какой-то отдельный файл, типа файлов с сессиями.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]