Код (Javascript): <! DOCTYPE HTML> <html> <head> <title>js</title> <meta charset="UTF-8"> <script type="text/javascript"> var data = ""; var data1 = ""; function buttonClick () { data = document.getElementById("1").value; return data; } console.log(data); </script> </head> <body> <input id = "1" type=«text»></input> <input id = "2" type=«text»></input> <input type="submit" value="Добавить" name="button" onclick="buttonClick (this) "> </body> </html> Подскажите, как мне сделать что бы при нажатии кнопки добавить, данные из поля id = 1 записались в переменную data, и переменной можно было пользоваться за пределами функции. Потому что console.log(data) работает только внутри функции
HTML: <! DOCTYPE HTML> <html> <head> <title>js</title> <meta charset="UTF-8"/> <script type="text/javascript"> var data = ''; function buttonClick() { data = document.getElementById('1').value; console.log(data); return data; } </script> </head> <body> <input id = "1" type="text"></input> <input id = "2" type="text"></input> <input type="button" value="Добавить" name="button" onclick="buttonClick()"> </body> </html> Даже писать в чем ошибка была "были" лень. Возьми и скопируй.
Так а чем ваш код от моего отличается? datой за пределами функции я всё равно пользоваться не могу? Как мне теперь использовать data за пределами функции?
Можете, почему нет-то? Вы объявили переменную в глобальной области видимости. Другое дело, что вы console.log(data) поставили вне функции. И оно срабатывает во время отработки содержимого тега script. И выводит пустую data. Но после кликов, в data добавляется инфа и остается там. А еще у вас ошибки в верстке. Закрывающий </input> не нужен.
А как запустить console.log после отработки скрипта что бы видеть изменения? Код (Javascript): if(data != undefined) { console.log(data); }
Поместить ее вызов в функцию, чтобы она отрабатывала при каждом вызове функции же. Это именно то, что @MouseZver сделал.
я понимаю. я к тому что за пределами функции я это никак не сделаю? мне просто этот момент интересен?
Код (Javascript): <! DOCTYPE HTML> <html> <head> <title>js</title> <meta charset="UTF-8"/> <script type="text/javascript"> var data = ''; function SetClick() { data = document.getElementById('1').value; console.log(data); } function GetClick() { document.getElementById('2').value = data; } </script> </head> <body> <input id="1" type="text"/> <input id="2" type="text"/> <input type="button" value="Добавить" onclick="SetClick()"/> <input type="button" value="Заценить" onclick="GetClick()"/> </body> </html> js отличается функционалом от php. В php такое не канает.
О чем речь вообще? Код в теге script выполняется сверху вниз, как есть. После этого он все. Он отработал. Если вызывать функции, которые в нем были объявлены, они будут работать. Но это функции. Они вызывают свой код. А не код снаружи. Любой язык так работает. Если нужна метафора, то вы хотите ложкой серпать суп, но так, чтоб ложку в рот класть, а суп во рту должен быть не из ложки, а из миски. Но и в ложке он тоже должен быть. Просто и тот и тот нужен. Но ипользуем только ложку. Звучит немного бредово. И именно так мне видится ваш вопрос. Что именно ты имеешь ввиду? Вроде ничего сврхъестественного у тебя не происходит в коде.
Ну потому что по дефолту функция будет искать переменную внутри себя. Если прописать global, то проблема отпадет сама собой. Но вообще, геттеры и сеттеры - это тема про ООП. В процедурном контексте же, речь может идти либо о глобальной переменной, либо о переменной в статичном реестре. В JS, в данном случае, то же самое. Просто не нужно писать global. Если переменная не найдена в текущем скоупе, она автоматом ищется в вышестоящем. И так далее, пока не дойдем до глобального. А в пыхе нужно. Это не особенность JS, это особенность пыхи
я сам до этого не знал что js может сохранять данные в переменных, как php в ООП в дальнейшем возвращаясь к ней и дергать, например self::$INSTANCE PHP: Class SQL { const HOST = ''; const DB_NAME = ''; const USER = ''; const PASSWORD = ''; protected static $INSTANCE = NULL; public static function instance() { if ( self::$INSTANCE === NULL ) { self::$INSTANCE = new PDO( 'mysql:host=' . self::HOST . ';dbname=' . self::DB_NAME . ';charset=utf8', self::USER, self::PASSWORD ); self::$INSTANCE -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); } return self::$INSTANCE; } public ...