2013-06-27 3 views
1

У меня есть эта кнопка, у которой есть значок (картинка). Теперь я хочу сделать это, нажав на значок кнопки (изображение), изменится на другой значок, и когда вы нажмете еще раз, он вернется к старой иконке. (например, принцип переключения).Как изменить значок кнопки на клик?

Вот мой код кнопки CSS:

.w8-button { 
    display: table; 
    padding: 7px 15px 8px 15px; 
    border: none; 
    font-family: "open_sans_lightregular"; 
    font-size: 13px; 
    font-weight: bold; 
    cursor: pointer; 
    opacity: 0.9; 
} 

и здесь значок CSS код:

.w8-button.iconize { 
    padding-right: 50px !important; 
    background: url(D:/firstPicture.png) no-repeat 115px center; 
} 

И это, как я называю свою кнопку в HTML:

<li> 
    <input type="submit" id="w8-d-blue" name="w8-d-blue" class="w8-button iconize" value="Button"/> 
</li> 

Может кто-нибудь сказать мне, как сделать код в javascript, что, когда я нажимаю на кнопку, значок (фоновое изображение) изменится и останется таким, un пока вы нажмите снова вернуться к старой (как система переключения)

+1

Вы готовы использовать JQuery? Его функция '.toggleClass()' идеально подходит для этого. – Barmar

+0

Прежде чем приложить усилия к написанию вопроса, я бы рекомендовал оглядеть существующий ответ, который решает эту проблему. Ответы как http://stackoverflow.com/questions/195951/change-an-elements-css-class-with-javascript и http://stackoverflow.com/questions/11006406/jquery-toggle-css-class охватывают это в подробно. – Swordfish0321

ответ

2

В современном браузере, поддерживающем addEventListener и Class List API (планки доступны для обеих страниц MDN, чтобы добавить поддержку старых броузеров), вы можете это сделать.

CSS

.w8-button { 
    display: table; 
    padding: 7px 15px 8px 15px; 
    border: none; 
    font-family:"open_sans_lightregular"; 
    font-size: 13px; 
    font-weight: bold; 
    cursor: pointer; 
    opacity: 0.9; 
} 
.w8-button.iconize { 
    padding-right: 50px !important; 
    background: url("http://imageshack.us/a/img856/3817/ticklf.png") no-repeat 5px center; 
} 
.w8-button.iconize2 { 
    padding-right: 50px !important; 
    background: url("http://imageshack.us/a/img822/1917/crossn.png") no-repeat 5px center; 
} 

HTML

<li> 
    <input type="submit" id="w8-d-blue" name="w8-d-blue" class="w8-button iconize" value="Button" /> 
</li> 

Javascript

document.getElementById("w8-d-blue").addEventListener("click", function (e) { 
    var target = e.target; 

    target.classList.toggle("iconize"); 
    target.classList.toggle("iconize2"); 
}, false); 

На jsfiddle

+0

Спасибо. Ты просто спасаешь мои нервы. Эта демо мне очень помогла. Всего миллион раз спасибо. –

+0

+1 хороший ответ! Не знал о 'classList'. OP: просто знайте о его поддержке (возможно, вам понадобится использовать прокладку): http://caniuse.com/classlist – acdcjunior

0

быстрое решение

var switch = 0, element = document.getElementById("w8-d-blue"), img1, img2; 
element.onclick = function(){ 

      if (switch == 0){ 
       element.style.backgroundImage(img1); 
       switch = 1; 
       } 
      else { 
         element.style.backgroundImage(img2); 
       switch = 0 
       } 

Я думаю, что вы не знаете о чудесах Jquery может принести вам. Если это так, вы должны действительно посмотреть его, это значительно упростит многие вещи.

+2

Вы 1) предполагаете, что он использует jQuery и 2) смешивает jQuery-решение с DOM-решением, которое вы не должны делать. Если OP должен был выбрать решение jQuery, он должен использовать .toggleClass(). – Swordfish0321

+0

Мой плохой, отредактированный, так что остается только функция, в которой он нуждается. – Euphe

0

Вот как вы можете сделать это в JQuery

$(function(){ 
    $("#w8-d-blue").click(function(){ 
    $(this).toggleClass("iconize"); 
    return true; 
    }); 
}); 

Чтобы использовать JQuery вам придется добавить это к головной части вашей страницы:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 

и введите код выше после этого.

+0

Если вы не пишете модульные тесты, базирующиеся на логическом значении, то возврат true не требуется. – Swordfish0321

+0

@ Swordfish0321 Известно, что он вызывает проблемы в некоторых браузерах (читайте IE), поскольку он может предотвратить фактическую функцию, которую должна выполнять кнопка. Мы хотим, чтобы рабочий процесс продолжался после выполнения графических изменений. –

+0

, о какой версии IE вы говорите? Вся цель использования jQuery в первую очередь - это не только сокращенная JS, но и неявная совместимость между браузерами. Итак, вы в основном говорите, что неопределенные функции ломают jQuery в IE ... не правда, сэр. – Swordfish0321