Jump to content
  • 0

Как передать переменную в функцию функцией_переменной


iillyyaa2
 Share

Question

<script>
function ddd(a3) {
alert(a3);
}
</script>

<button onclick="ddd(function(){return 17;});">Ok</button>

вот хотелось бы передать 17 в функцию ddd

вариант ddd(17); не предлагать

алерт выдаёт: function(){return 17;}

короче, пока писал, сам придумал... может кому то пригодится такой изврат... :)

<script>
function ddd(a3) {
alert(a3);
}
</script>

<button onclick="ddd(function(){return 17;}.call());">Ok</button>

Edited by iillyyaa2
Link to comment
Share on other sites

Recommended Posts

  • 0

1. этот бутон генерируется явой, а функция добывает значение из поля инпут чуть меняя его.. на самом деле код на много сложнее :) главное мне получить нужное значение, которое я передам уже нужной функции, а не нужной функцией буду добывать эти данные..

2. я написал минимум кода для понятия сути... заметь я хеад, боди и прочее тоже не написал :)

Link to comment
Share on other sites

  • 0
1. этот бутон генерируется явой, а функция добывает значение из поля инпут чуть меняя его.. на самом деле код на много сложнее главное мне получить нужное значение, которое я передам уже нужной функции, а не нужной функцией буду добывать эти данные..

Т.е.:

<button onclick="тут генерится мега-функция, которая что-то делает с данными">Ok</button>

А нафиг такое извращение?

Link to comment
Share on other sites

  • 0

Great Rash, допустим, у меня несколько полей для ввода текста, и несколько кнопок.. каждая кнопка связана со своим полем... и по нажатию мы переходим в функцию, и ей передаём значение поля.

всякие this и прочее не подходит, т.к. поле не завязано может быть с кнопкой.. даже может тег a выполнить это действие.

или делать кучу функций которые будут срабатывать на нажатие кнопки и потом передавать эти данные, или я сразу анонимную функцию сделал и в неё засунул код

Link to comment
Share on other sites

  • 0

но функция ddd() может быть универсальной и получать различные данные, какие то требуется обработать, какие то нет...

я счёл, что так у меня будет проще код, не будет кучи лишних функций.. читабельнее... а скорость работы она что так, что так одинаковая..

Link to comment
Share on other sites

  • 0

По-моему проще чтобы функция сама решала какие данные обрабатывать, а какие нет, чем городить кучу инлайн-функций для предварительной обработки данных. В общем есть мнение что вы какими-то извращенными категориями мыслите. Может на вас так PHP влияет...

Link to comment
Share on other sites

  • 0

до этого я делал как раз обработку в функции ddd(), в результате она занимала 100 строк.. сейчас же размер её 25 строк :)

удобнее, читабельнее..

и нету лишних функций, что бы не бегать по ним и не искать где и что происходит..

с таким же успехом можно сказать, зачем делать

<button onclick="ddd( document.getElementById( 'my_input' ).value );">Ok</button>

когда можно передать my_input в функцию ddd() и там уже выбрать значение...

верно ?

но это делается для упрощения кода, для читабельности...

Link to comment
Share on other sites

  • 0

вот я и добился чего хотел :)

а теперь докажу, что написание так, как я сделал в первом посте целесообразнее.

значит говоришь, проще передать my_input

предложим у нас такой код

function ddd(value) {
alert(value);
}

2 кнопки (или больше)

<button onclick="ddd(17);">bbb</button>
<button onclick="ddd('fff');">eee</button>
<input type="text" value="" id="my_input"><button onclick="ddd('my_input');">go</button>

но теперь нам нужно в функцию добавить:

value = document.getElementById( 'value' ).value;

но, т.к. в функцию могут приходить сразу готовые данные из верхних кнопок, нам не достаточно будет выше написанного кода, нам придётся вводить к примеру ещё одну переменную, что бы знать, переменная пришла или "id"

function ddd(value,myTip) {
if (myTip == 'id') {
value = document.getElementById( 'value' ).value;
}
alert(value);
}

вот мы уже увеличили функцию на 1 переменную и на 3 строки кода..

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

а теперь возьмём, что в функцию могут не только из "id - value" приходить данные, а к примеру элемент массива...

ещё 3 строчки ?

вот возьмём к примеру... у нас есть массив, по нажатию на 1 кнопку мы заполняем его какими то данными

нажав 2 кнопку, изменяем данные в массиве и дополняем..

а нажав последнюю кнопку мы делаем код:

if (ar[value]) {
return 17;
}

вот такая будет кнопка:

<button onclick="ddd(function(){if (ar[value]){return 17;}}.call());">Ok</button>

куда проще этот код мне засунуть в онклик, чем добавлять в функцию

(код не совсем логичный но смысл думаю понятен) :)

или где я не прав ? :(

Edited by iillyyaa2
Link to comment
Share on other sites

  • 0

Проще когда код собран в одном месте, а не разбросан по всему проекту как попало.

Представим ситуацию:

Я сделал некий проект (пусть будет калькулятор ОСАГО, скажем). Я сделал одну маленькую функцию которая ничего не обрабатывает а только вставляет данные в определенный элемент (аналог вашей ddd();), допустим так:


function ddd( val ) {
document.getElemenById( 'result' ).innerHTML = val;
}

А потом я где-то как-то формирую в теле HTML код типа такого:


<button onclick="ddd( function(){ return document.getElementById( 'value' ).value; }.call() );">Ok</button>

Это на выходе, а реально будет написано что-то типа такого:


<button onclick="ddd( <?=$func;?>.call() );">Ok</button>

Я сдал проект и забыл про него... Но через год вышло новое постановление правительства, которое изменяет порядок расчета ОСАГО. И ко мне (или, что вероятней, к другому программеру) бежит заказчик с просьбой переделать калькулятор, чтобы он считал по-новой. Я (или тот другой) открываю исходники, первым делом лезу в скрипт с названием типа calc.js и вижу там куцую функцию ddd();!?

"WTF", думаю я и начинаю смотреть что откуда вызывается. Вижу в фаербаге колбасу на баттоне, которую неудобно читать, т.к. она вся в строку, заглядываю в .php-файл и снова охреневаю от того, что мне надо выяснять откуда взялась переменная $func и что в нее передается...

Что-то мне не кажется подобный путь правильным...

Link to comment
Share on other sites

  • 0

Great Rash, смотри, тебе ведь надо менять функцию, зачем ты полез в переменную ?? функция наоборот читабельна, в ней понятно, приходит переменная, рассчитывается и что то делается, обновляется результат к примеру.

а откуда берётся эта переменная в данном случае тебя мало волнует.

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

у тебя была задача а + б = с

поменяли закон, теперь надо делать а * б = с

зачем тебе переменная а ??

а если добавилась новая переменная, которой не было раньше, то добавляй её..

я не понимаю, в чём проблема...

даже будь код такой:

<button onclick="ddd( <?=$func;?>.call() );">Ok</button>

в чём проблема найти, что же в переменной $func; ? хотя не вижу смысла забивать этот текст в пхп-переменную и опять выводить его.. покрайней мере в таком стиле кода..

если только запутать зря себя же :)

ЗЫ наш спор из области table vs div :)

тут мне кинули один макет, круто, без таблиц... вот только при изменении размера окна верхнее и левое уходит за границы, и прокруткой туда не попасть :( крутой програмер :(

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

Edited by iillyyaa2
Link to comment
Share on other sites

  • 0

конечно, конечно, я наверно так же не прав, когда пишу:

<div style="height: 15px;">ffff</div>

при условии, что это будет встречаться всего в 1 месте

но надо делать так:

<style>
.uhaha{
height: 15px;
}
</style>

<div class="uhaha">ffff</div>

да и причём тут html я не пойму... всё что внутри onclick уже к html никакого отношения не имеет ;)

Link to comment
Share on other sites

  • 0

конечно, конечно, я наверно так же не прав, когда пишу:

<div style="height: 15px;">ffff</div>

при условии, что это будет встречаться всего в 1 месте

но надо делать так:

<style>
.uhaha{
height: 15px;
}
</style>

<div class="uhaha">ffff</div>

да и причём тут html я не пойму... всё что внутри onclick уже к html никакого отношения не имеет ;)

onclick - это атрибут HTML-тэга. Ключевое слово HTML. В общем делайте как хотите, учитесь на своих ошибках.

Да и логика это не onclick совсем. Логика - это if, else и логические операции. Используйте свой вездесущий onclick вместо addEventLithener, но логику то пихать в onclick это извращение редкое.

И кстати использование style="height: 15px;" говорит: вам нужно лезть в HTML шаблон, чтобы редактировать CSS, а не один раз открыть CSS и править. Тем более класс может использоваться несколько раз. В общем да, вы не правы.

Edited by alanvanduke
Link to comment
Share on other sites

  • 0

И кстати использование style="height: 15px;" говорит: вам нужно лезть в HTML шаблон, чтобы редактировать CSS, а не один раз открыть CSS и править. Тем более класс может использоваться несколько раз. В общем да, вы не правы.

великолепно, обновили файлик CSS открываем страницу и опа, ничего не произошло... ведь браузер закешировал старый CSS, нужно в html изменить урл к примеру на такой my.css?17

в результате:

- мы меняем сразу 2 файла...

- заставляем пользователей перезагружать весь css

хотя могли бы поменять всего 1 файл...

да, мы ещё каким то мифическим способом узнали, какой же класс у нашего блока..

мы ведь изменили блок (скорее всего содержимое) и сразу не можем изменить его параметр.. мы должны найти в каком css файле у нас хранится его стиль, найти там этот стиль, изменить...

опять я дурак ? ;)

Link to comment
Share on other sites

  • 0

iillyyaa2, кажется, я знаю что тебя спасет...

function ddd(node, attr) {
alert(node[ attr || "value"]);
}

<button onclick="ddd(this, 'textContent');">bbb</button>
<button onclick="ddd(this, 'textContent');">eee</button>
<input type="text" value="" id="my_input"><button onclick="ddd(document.getElementById( 'my_input' ));">go</button>

Примерно так

Link to comment
Share on other sites

  • 0

onclick - это атрибут HTML-тэга. Ключевое слово HTML. В общем делайте как хотите, учитесь на своих ошибках.

точно, яваскрипт тоже HTML ? ведь <script> это тег HTML ;)

Да и логика это не onclick совсем. Логика - это if, else и логические операции. Используйте свой вездесущий onclick вместо addEventLithener, но логику то пихать в onclick это извращение редкое.

а "onclick вместо addEventLithener" то тут причём ?

извращение это из блоков делать таблицу стилями, хотя есть тег <table> ;)

но ничё, такие извращенцы сейчас считаются мега програмистами ;)

s0rr0w, код может быть и сложнее.. или у разных кнопок разный алгоритм получения данных..

мой вариант работает успешно... код читабельный, функции лёгкие, быстро находить нужное...

Link to comment
Share on other sites

  • 0

И кстати использование style="height: 15px;" говорит: вам нужно лезть в HTML шаблон, чтобы редактировать CSS, а не один раз открыть CSS и править. Тем более класс может использоваться несколько раз. В общем да, вы не правы.

великолепно, обновили файлик CSS открываем страницу и опа, ничего не произошло... ведь браузер закешировал старый CSS, нужно в html изменить урл к примеру на такой my.css?17

в результате:

- мы меняем сразу 2 файла...

- заставляем пользователей перезагружать весь css

хотя могли бы поменять всего 1 файл...

да, мы ещё каким то мифическим способом узнали, какой же класс у нашего блока..

мы ведь изменили блок (скорее всего содержимое) и сразу не можем изменить его параметр.. мы должны найти в каком css файле у нас хранится его стиль, найти там этот стиль, изменить...

опять я дурак ? ;)

Можно говорить, что Земля круглая, а можно перевирать и говорить, что она не круглая, а например вселенная круглая, а нам кажется, что и земля круглая.

Ничего не станет с вашими пользователями. Не умрут и не обеднеют. Даже заметно ничего не будет для них.

Link to comment
Share on other sites

  • 0
великолепно, обновили файлик CSS открываем страницу и опа, ничего не произошло... ведь браузер закешировал старый CSS, нужно в html изменить урл к примеру на такой my.css?17

в результате:

- мы меняем сразу 2 файла...

- заставляем пользователей перезагружать весь css

Для этого в query string добавляется не абы какое число, а дата изменения CSS. Причем добавляется автоматически скриптом. И тогда юзер грузит CSS только когда он обновился.

Link to comment
Share on other sites

  • 0

Ничего не станет с вашими пользователями. Не умрут и не обеднеют. Даже заметно ничего не будет для них.

а зачем вы вообще используете яваскрипт ??

ничего не случится с пользователем, если он перезагрузит страницу... зачем их обновлять динамически ?

не очень хороший подход у вас.

alanvanduke, как ты узнал какой класс нужно менять ? и в каком из нескольких CSS файлов ??

зашел в "html" файл, посмотрел этот блок, запомнил и начал искать класс ? вместо того, что бы сразу поменять ? ;)

(я молчу уже про занятое имя, в больших проектах это усложняет написание)

Edited by iillyyaa2
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy