Боюсь, ваш код требует довольно серьезного рефакторинга. В текущей реализации при каждом щелчке переключателя вы привязываете все новые и новые функции к событиям размытия и фокусировки - и это только одна из ваших проблем (хотя и самая тяжелая).
Поскольку вы очень хорошо помещаете свои требования в упорядоченный список, становится ясно, что вам нужно привязать к трем событиям: нажимать на кнопки, фокусироваться и размыть поля ввода. Это хороший признак того, что вам придется реализовать следующие функции (без необходимости использования $ .fn.extend):
$('input[type=radio]').on('click', function() { ... });
$('input.input-search').on('focus', function() { ... });
$('input.input-search').on('blur', function() { ... });
Таким образом, правильным подходом было бы объявить ваш defaultInputVal один раз как объект вместо одной строки, например:
var defaultInputVal = {
goods-url : '输入宝贝网址',
goods-name : '输入宝贝名称',
...
};
На основе идентификатора любого поля ввода вы можете легко получить значение по умолчанию для данного
поле. Вышеупомянутые три функции должны выполняться по линиям:
$('input[type=radio]').on('click', function() {
$('input.input-search').val(defaultInputVal[$(this).attr('id')]);
});
$('input.input-search').on('focus', function() {
var selected_radio_id = $('input[type=radio]:checked').attr('id');
if ($(this).val() == defaultInputVal[selected_radio_id]) {
$(this).val('').css({
'color': 'black'
});
}
}).on('blur', function() {
var selected_radio_id = $('input[type=radio]:checked').attr('id');
if ($(this).val() == '') {
$(this).val(defaultInputVal[selected_radio_id]).css({
'color': '#969696'
});
}
});
Код не проверен, но должен указывать правильное направление. Есть еще много возможностей для улучшения, например, не засорять глобальное пространство имен переменными, но это, вероятно, первый шаг, который вам нужно сделать.