Jump to content
  • 0

выпадающий список


egoregor
 Share

Question

есть код:

this.style.backgroundColor=this.options[this.selectedIndex].style.backgroundColor;

и выпадающий список:

<select style='width:100px;' id="color" name="color-choise" size="1" onchange="color()";>

Если я прописываю код прямо внутри списка, за место функции "color()", то код выполняется. Но если я записываю его так

<script type="text/javascript">
function color() {
this.style.backgroundColor=this.options[this.selectedIndex].style.backgroundColor;
}

</script>

то ничего не происходит.

В чем проблема?

Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

Тебе стоит подробно разобраться с this в Javascript. Здесь, например.

В твоём случае this указывает на объект window. Исправь так:

function color(obj) {
obj.style.backgroundColor=obj.options[obj.selectedIndex].style.backgroundColor;

}

А потом так:

<select style='width:100px;' id="color" name="color-choise" size="1" onchange="color(this)";>

P.S.: Всё дело в контексте выполнения (execution context). У тебя работает, потому что контекстом является сам список (объект select).

А не работает, потому что функция color() (в твоём случае по умолчанию принадлежащая глобальному объекту) задаёт другой контекст выполнения - объект window.

Чтобы исправить ты должен в входном параметре передать нужный контекст - текущий объект (Select).

Edited by DrStrangeLove
Link to comment
Share on other sites

  • 0

Спасибо.

Я логику понял, код исправил, но все равно ничего не меняется.

Покажи свой код. Иногда, когда задаёшь обработчик так

onchange="color(this)";

то могут быть проблемы из-за точки с запятой - попробуй убрать её или переставить как-нибудь, например так -

onchange="color(this);"

Link to comment
Share on other sites

  • 0

Код такой:


<html>
<head>
<script type="text/javascript">
function color(obj) {
obj.style.backgroundColor=obj.options[obj.selectedIndex].style.backgroundColor;
}
</script>

</head>
<body>
<form action="add-car.php" method="post" name="car-registration">
<label>Color</label>
<select style='width:100px;' id="color-choice" name="color-choise" size="1" onchange="color(this)";>
<option style='background-color:white;' value="white"></option>
<option style='background-color:yellow;' value="yellow"></option>
<option style='background-color:red;' value="red"></option>
<option style='background-color:orange;' value="orange"></option>
<option style='background-color:black;' value="black"></option>
<option style='background-color:gray;' value="gray"></option>
<option style='background-color:brown;' value="brown"></option>
<option style='background-color:green;' value="green"></option>
<option style='background-color:navy;' value="navy"></option>
<option style='background-color:salmon;' value="salmon"></option>
</select>
</form>

Иногда, когда задаёшь обработчик так

onchange="color(this)";

то могут быть проблемы из-за точки с запятой - попробуй убрать её или переставить как-нибудь, например так -

onchange="color(this);"

И с ней, и без нее не работает.

Link to comment
Share on other sites

  • 0

как так...

Конечно это не весь код моей страницы, только ее часть.

Раз уж на то пошло, вот весь код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Home page</title>
<link rel="shortcut icon" href="favicon.ico" />
<link rel="stylesheet" media="screen" href="css/style.css" />
<script type="text/javascript">
function color(obj) {
obj.style.backgroundColor=obj.options[obj.selectedIndex].style.backgroundColor;

}
</script>

</head>
<body>
<?php
include "includes/connect.php";
?>

<div id="wrapper"><div id="wrapper-inner">

<div id="header">

<div id="header-top">
<div class="site-logo">
<a href="#" title="Site Logo">Site Logo</a>
</div>

<form action="" id="form-search-light">
<div class="form-item">
<label for="form-search-light-input-search">You can use search here</label>
<input type="text" id="form-search-light-input-search" size="12" />
</div>
<div class="form-item">
<input type="submit" value="GO" id="form-search-light-submit" />
</div>
</form>

</div>

<div id="header-bottom">

<ul class="menu" id="menu-main-top">
<li><a href="index.php" title="Home page">Home</a></li>
<li><a href="car.php" title="About page">Add car</a></li>
<li><a href="customer.php" title="About page">Add customer</a></li>
</ul>

</div>
</div>
<div id="content">
<h2 class="page-title">Add car</h2>
<div class="block-text">
<form action="add-car.php" method="post" name="car-registration">
<div>
<label>Name</label>
<input type="text" name="name" id="author" value=""/>

<label>Year</label>
<select style='width:100px;' name="year" size="1">
<?php
$date_time_array = getdate( time() );
$i=0;
while ($i<41) {
echo "<option value=\"year\">".($date_time_array['year']-$i)."</option>";
$i++;
}
?>
</select>

<label>Cost</label>
<input type="number" name="cost" value=""/>
<label>Color</label>
<select style='width:100px;' id="color-choice" name="color-choise" size="1" onchange="color(this)";>
<option style='background-color:white;' value="white"></option>
<option style='background-color:yellow;' value="yellow"></option>
<option style='background-color:red;' value="red"></option>
<option style='background-color:orange;' value="orange"></option>
<option style='background-color:black;' value="black"></option>
<option style='background-color:gray;' value="gray"></option>
<option style='background-color:brown;' value="brown"></option>
<option style='background-color:green;' value="green"></option>
<option style='background-color:navy;' value="navy"></option>
<option style='background-color:salmon;' value="salmon"></option>
</select>
<label>Customer</label>
<select style='width:100px;' name="customer" size="1" value="" onchange="document.getElementById('id-cust').value=this.options[this.selectedIndex].value">
<?php
include "includes/connect.php";
$res=mysql_query("SELECT id,name FROM customers");
while($row=mysql_fetch_array($res)){
$customer=$row[name];
$id=$row[id];
echo "<option value=\"".$id."\" >".$customer."</option>";
}

?>
</select>
<input type='text' name="id-customer" id="id-cust" value"">
<input type='text' name="color" id="colo" value"">
<input name="submit" type="submit" value="ADD">
</div>
</form>
</div>
</div>
</div>
<div id="footer">
<div class="footer-copy">© <a href="#">IT-Excellence</a></div>
</div>

</div></div>

</body>
</html>

Link to comment
Share on other sites

  • 0

OMG! Я понял в чем дело. Во первых, у вас много ошибок в html их нужно исправлять. Пример: value"" , но дело не в этом. Скрипт не работает из-за конфликта имени инпута (name="")

<input type='text' name="color" id="colo" value"">

с названием вашей функции. Т.е. name="color" не позволяет использовать функции с тем же именем. Сам не так давно изучаю ДжаваСкрипт, но понимаю, тут проблема в области видимости. Правда плохо понимаю, почему и как создается некий идентификатор с именем color у объекта образованного элементом input с которым и происходит конфликт. Можно ссылкой бросить или объяснить? Ведь мне казалось, что color здесь просто значение свойства name и конфликтовать нечему. Но видно не так.

Edited by zSpx
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