2015-02-26 2 views

ответ

1

Измените функцию Javascript, чтобы принять параметр:

function changePicture(tag) 
{ 
    $(tag).siblings("img").attr("src",$(this).val()); 
} 

Ваш HTML-код будет вызывать функцию, пропустив ее 'это':

<img src='picture.jpg'> 
<select name='blah[0]' onchange='changePicture(this);'> 
    <option value='default.jpg'>Default</option> 
    <option value='somethingelse.jpg'>A picture</option> 
</select> 
+0

Благодаря Патрик, есть еще это, что нужно изменить, чтобы пометить. Я должен был там сам, я думал, что где-то я читал, что события могут использовать это, чтобы ссылаться на элемент, который их назвал, но явно нет. –

0

$(function() { 
 
    $("#select").change(function() { 
 
    var src = $("#select").val(); /* value of the current selected option */ 
 
    
 
    $("#img").prop("src", src); 
 
    
 
    alert($("#img").prop("src")); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<img id = "img" src='picture.jpg'> 
 
<select id = "select" name='blah[0]' onchange='changePicture();'> 
 
    <option value = "picture.jpg">Default Picture</option> 
 
    <option value='default.jpg'>Default</option> 
 
    <option value='somethingelse.jpg'>A picture</option> 
 
</select>

Я добавил 2 идентификаторами, img идентифицировать изображения и select для идентификации выбора. Я использовал функцию .change() JQuery, которая срабатывает при изменении <option>. Принимаю value из <option> и изменил изображение src.

+0

Я не упомянул в вопросе о том, что будет неизвестное количество элементов select, каждое из которых будет иметь свой собственный sibling img, но я намекнул на него с [0] как имя оператора select. Я чувствую, что это делает использование ID намного сложнее, чем того стоит. Поэтому почему я использовал селектор. Спасибо за ваш ответ. –

1

Сначала вы не передаете ссылку на элемент выбора в своем коде, поэтому this не имеет значения в вашей функции. Чтобы сделать это, вы сделали бы что-то вроде onchange='changePicture(this);', но я не рекомендую это.

Поскольку вы используете JQuery, вы должны использовать событие JQuery в обращении, как это:

$('select[name="blah[0]"]').change(function(){ 
    $(this).siblings("img").attr("src", $(this).val()); 
}) 

jsFiddle example

+0

Я не могу найти ссылку сейчас, но где-то я думал, что мне сказали, что с событиями вы можете использовать «это» для ссылки на элемент, из которого он пришел, но, очевидно, нет. Это сделает мой код намного более аккуратным, если я могу использовать функцию javascript с jquery внутри и добавить событие в HTML, поскольку [0] предполагает наличие неизвестного количества элементов выбора, которые должны изменить их sibling img. –

+0

_ «Я не могу найти ссылку сейчас, но где-то я думал, что мне сказали, что с событиями вы можете использовать« это »для ссылки на элемент, из которого он пришел» _ Да, но вам нужно передать ссылку на элемент в той функции, которую вы не делали. _ «есть неизвестное количество элементов выбора, которые должны изменить их sibling img». Вы можете изменить селектор в соответствии с вашими потребностями. Я просто выбрал '$ ('select [name =" blah [0] "]')' на основе вашего примера, но вы могли бы сделать его более общим, как '$ ('select')' – j08691

Смежные вопросы