|
|
|
| Здравствуйте. jQuery раздела у форума не вижу по-этому создаю тему здесь.
Из этого куска кода каким-то образом передается параметр для функции updateInfo, либо это закладено у самом плагине, либо то что находится у function(){}:
............
............
............
// initialize Jcrop
$('#'+phot+'preview').Jcrop({
minSize: [250, 150], // min crop size
aspectRatio : 1.6666666666666666, // keep aspect ratio 1:1
bgFade: true, // use fade effect
bgOpacity: .3, // fade opacity
onChange: updateInfo,
onSelect: updateInfo,
onRelease: clearInfo
}, function(){
// use the Jcrop API to get the real image size
var bounds = this.getBounds();
boundx = bounds[0];
bound = bounds[1];
// Store the Jcrop API in the jcrop_api variable
jcrop_api = this;
});
|
А вот и сама функция updateInfo:
// update info by cropping (onChange and onSelect events handler)
ffunction updateInfo(e) {
$('#'+phot+' #x1').val(e.x);
$('#'+phot+' #y1').val(e.y);
$('#'+phot+' #x2').val(e.x2);
$('#'+phot+' #y2').val(e.y2);
$('#'+phot+' #w').val(e.w);
$('#'+phot+' #h').val(e.h);
};
|
Вопрос: как мне предать у функцию updateInfo параметр phot.
Принимать наверное так updateInfo(e,phot), но где дописать чтобы отправить?
// Делаю я это для того чтобы была возможность загружать одновременно два изображения и обрезать их. Полный пример если что: http://www.script-tutorials.com/html5-image-uploader-with-jcrop/ | |
|
|
|
|
|
|
|
для: NE}|{UBOJ
(13.03.2013 в 02:36)
| | 1. Ищите в сети что-то типа "как написать плагин jQuery".
2. Открываете исходный код используемого вами плагина и смотрите как передаются аргументы в него, как они принимают значения по умолчанию.
3. И вообще - открываете учебник JavaScript и читаете о функциях и аргументах. | |
|
|
|
|
|
|
|
для: confirm
(13.03.2013 в 14:14)
| | Плагин уже написан, исходный код посмотрел, учебник JavaScript о функциях и аргументах, прочитал на сайте javascript.ru.
Вот что нашел там:
Синтаксис:
var result = fun.call(thisArg[, arg1[, arg2[, ...]]])
|
Пример :
var Animal1 = {
name: 'Cat',
sayName: function() {
alert(this.name);
}
};
|
Но так и не дошло как поступить у моем варианте | |
|
|
|
|
|
|
|
для: NE}|{UBOJ
(13.03.2013 в 16:25)
| | А заглянуть в код плагина? Понимаете, за вас копаться в нем никто не будет, по несколько раз рассказывать одно и тоже каждому жаждущему, индивидуально, тоже самое (а такие вопросы есть практически на всех форумах, включая и этот).
Хотите разобраться как это делается, открывайте плагин, изучайте, дорабатывайте. | |
|
|
|
|
|
|
|
для: confirm
(13.03.2013 в 16:32)
| | Нашел код который в плагине который нужен.
function m(b){typeof b!="object"&&(b={}),d=a.extend(d,b),a.each(["onChange","onSelect","onRelease","onDblClick"],function(a,b){typeof d[b]!="function"&&(d[b]=function(){})})}
|
Думаю новичку в нем разобраться нереально. | |
|
|
|
|
|
|
|
для: NE}|{UBOJ
(13.03.2013 в 16:41)
| | А новичку надо изучать и желательно не с того, что ему непосильно, а с малого, с самого начала.
Как бы это вам поделикатнее - мало передать в плагин аргумент, надо еще понимать, как с этим аргументом плагин взаимодействовать будет. Ваш аргумент же не для alert("Ok!"), и что вы хотите? | |
|
|
|
|
|
|
|
для: confirm
(13.03.2013 в 16:53)
| | Аргумент нужен практически как для alert
В форме есть загрузчик файлов, если изображение загружено, запускается функция с параметром article либо slider для определения с которым загрузчиком должен работать плагин:
<form>
<div id="article">
Загрузчик 1:
<input type="file" name="image_file" id="image_file" onchange="fileSelectHandler('article')" />
</div>
<div id="slider">
Загрузчик 2:
<input type="file" name="image_file" id="image_file" onchange="fileSelectHandler('slider')" />
</div>
</form>
|
Если файл выбран вступает function fileSelectHandler(phot) , которая получает параметр phot, и который нужно прицепить до функций, для определения <div id="slider либо article">
function fileSelectHandler(phot) {
// get selected file
var oFile = $('#'+phot+' #image_file')[0].files[0];
// hide all errors
$('#'+phot+' .error').hide();
....................
....................
var oImage = document.getElementById(phot+'preview');
// prepare HTML5 FileReader
var oReader = new FileReader();
oReader.onload = function(e) {
// e.target.result contains the DataURL which we can use as a source of the image
oImage.src = e.target.result;
oImage.onload = function () { // onload event handler
// Create variables (in this scope) to hold the Jcrop API and image size
var jcrop_api, boundx, boundy;
// destroy Jcrop if it is existed
if (typeof jcrop_api != 'undefined')
jcrop_api.destroy();
// initialize Jcrop
$('#'+phot+'preview').Jcrop({
minSize: [250, 150], // min crop size
aspectRatio : 5 / 3, // keep aspect ratio 1:1
bgFade: true, // use fade effect
bgOpacity: .3, // fade opacity
onChange: updateInfo,
onSelect: updateInfo,
onRelease: clearInfo,
phot: phot
}, function(){
// use the Jcrop API to get the real image size
var bounds = this.getBounds();
boundx = bounds[0];
bound = bounds[1];
// Store the Jcrop API in the jcrop_api variable
jcrop_api = this;
});
};
};
// read selected file as DataURL
oReader.readAsDataURL(oFile);
}
|
Мне нужно прицепить аргумент phot на действие onChange: updateInfo (которая определяет координаты для обрезки).
Не получается определять координаты для двух обработчиков сразу, где phot указывает какие координаты обновлять либо для блока article, либо slider
function updateInfo(e) {
$('#'+phot+' #x1').val(e.x);
$('#'+phot+' #y1').val(e.y);
$('#'+phot+' #x2').val(e.x2);
$('#'+phot+' #y2').val(e.y2);
$('#'+phot+' #w').val(e.w);
$('#'+phot+' #h').val(e.h);
}; | |
|
|
|
|
|
|
|
для: NE}|{UBOJ
(13.03.2013 в 16:41)
| | Еще раз повторяю, ни кто не будет разбираться с кодом вашего плагина.
Аргументы в плагин передаются объектом (какие и как они задаются, смотрите в описании этого плагина). Труда не составит добавить в этот объект свой аргумент.
Строка, которую вы нашли в плагине, это есть разбор этого объекта (аргументов) :
function m(b){typeof b!="object"&&(b={}),d=a.extend(d,b),a.each(["onChange","onSelect","onRelease","onDblClick"],function(a,b){typeof d[b]!="function"&&(d[b]=function(){})})}
Далее по коду как раз и будет присвоение значений переданных или по умолчанию.
Если вам сказать где и как, то вряд ли на этом все закончится, а играть в сквош "об стенку горохом" никому не охота.
Оплатите услуги, для вас доработают плагин, иначе углубляйтесь сами в него. | |
|
|
|
|
|
|
|
для: confirm
(13.03.2013 в 17:34)
| | Плюс к этому есть еще один нюанс - php-обработчик принимает в конкретный момент времени лишь ОДИН файл. | |
|
|
|
|
|
|
|
для: confirm
(13.03.2013 в 17:34)
| | Хорошо, просто подскажи откуда у функции берется аргумент е:
function updateInfo(e) {
$('#'+phot+' #x1').val(e.x);
$('#'+phot+' #y1').val(e.y);
$('#'+phot+' #x2').val(e.x2);
$('#'+phot+' #y2').val(e.y2);
$('#'+phot+' #w').val(e.w);
$('#'+phot+' #h').val(e.h);
};
|
из функции ниже передается ???
$('#'+phot+'preview').Jcrop({
minSize: [250, 150], // min crop size
aspectRatio : 5 / 3, // keep aspect ratio 1:1
bgFade: true, // use fade effect
bgOpacity: .3, // fade opacity
onChange: updateInfo,
onSelect: updateInfo,
onRelease: clearInfo
}, function(){
// use the Jcrop API to get the real image size
var bounds = this.getBounds();
boundx = bounds[0];
bound = bounds[1];
// Store the Jcrop API in the jcrop_api variable
jcrop_api = this;
});
|
| |
|
|
|
|
|
|
|
для: NE}|{UBOJ
(13.03.2013 в 19:37)
| | Я вам уже сказал - можно объяснить человеку понимающему, или даже подсказать немного, а далее он сам. Но вам, не понимающему простых вещей, стоит заикнуться обо одном, придется либо лекцию читать, либо долго и бесполезно втолковывать. Я ни того, ни другого делать не хочу.
Подумайте сами - вам известно чего вы хотите куда-то передать. Задайтесь вопросом откуда это нечто у вас? Если это вами контролируемая переменная, она асинхронная событию, которая вас интересует, то зачем вам ее передавать куда либо через что-то - объявляйте ее глобальной и в обработчике этого события обращайтесь к ней.
Если же эта переменная, вернее ее значение должно быть частью интересующего вас события, значит увы, вникайте в плагин. Но в этом случае не понятно кто ее породил.
Переменная е не возникает, а объявляется. | |
|
|
|
|
|
|
|
для: confirm
(13.03.2013 в 19:56)
| | Ему нужно засесть за учебник JS.
У меня уже складывается впечатление, что человеку нужнее, чтобы кто-то бросил все свои дела и решил эту его "проблему", чем понять "как это работает".
Но все мы грешили подобным, будучи абсолютными новичками... | |
|
|
|
|
|
|
|
для: Deed
(13.03.2013 в 20:02)
| | Как это работает я понимаю, в коде плагина не могу разобраться. Ну извините если что. Готов отблагодарить за помощь. | |
|
|
|
|
|
|
|
для: NE}|{UBOJ
(13.03.2013 в 19:37)
| | Аргумент "e" в javascript обычно является укороченным от event - "событие": event.target например. Буква может быть любая.
Ну, а ф-ция updateInfo() здесь просто-напросто прописывает новые значения высоты-ширины картинки после каждого ресайза в скрытые текстовые поля для последующей передачи этих значений в php-обработчик. | |
|
|
|
|
|
|
|
для: Deed
(13.03.2013 в 19:59)
| | Этот плагин работает только для одного загрузчика и в нем я разобрался, все работает, получаю значения высоты-ширины в php обработчике и отправляю на сервер.
А мне надо научить функцию updateInfo() прописывать значения на событие onChange то одному загрузчику то другому, в зависимости с каким изображением работаем. Можно проще поступить, например сделать копию плагина и переименовать несколько функций, но плодить подобный код не охота.
ЗАЧЕМ МНЕ передавать что-то в updateInfo(е)??
Если существует два блока для двух изображений:
<div id="slider">
<!-- скрытые параметры 1 -->
<input type="hidden" id="x1" name="x1" />
<input type="hidden" id="y1" name="y1" />
<input type="hidden" id="x2" name="x2" />
<input type="hidden" id="y2" name="y2" />
<input type="file" name="image_file" id="image_file" onchange="fileSelectHandler('slider')" />
</div>
<div id="article">
<!-- скрытые параметры 2 -->
<input type="hidden" id="x1" name="x1" />
<input type="hidden" id="y1" name="y1" />
<input type="hidden" id="x2" name="x2" />
<input type="hidden" id="y2" name="y2" />
<input type="file" name="image_file" id="image_file" onchange="fileSelectHandler('article')" />
</div>
Так как определить какому блоку присваивать новые значения?
Готов за помощь отблагодарить webmoney | |
|
|
|
|
|
|
|
для: NE}|{UBOJ
(13.03.2013 в 20:36)
| | ЗАЧЕМ МНЕ передавать что-то в updateInfo(е)??
Понятия не имею, вы же об этом спрашивали как, а что это уж вам виднее. Как можно поступить, если это допустимо, я вам уже написал. | |
|
|
|
|
|
|
|
для: NE}|{UBOJ
(13.03.2013 в 20:36)
| | Да Господь с вами! Какие вэбманы???
Я бы, если бы так уж прижало, скопировал бы код плагина (как я понял, он обфусцирован) и прогнал бы его черег deobfuscator (see it at Google) для придания ему читабельного вида...
Затем в <!-- скрытые параметры 2 --> я бы переименовал все id, чтобы они не дублировали свои аналоги в <!-- скрытые параметры 1 -->.
Потом, я бы сделал копию updateInfo() (for example update_Info()), которая работала бы с элементами из <!-- скрытые параметры 2 -->.
Ну, а то, какую именно ф-цию вызывать (updateInfo() или update_Info()) в fileSelectHandler() поставил бы в зависимости от переданного ей аргумента ('slider' или 'article').
Это все, чем я могу помочь. Во-первых я сам дилетант-любитель, а, во-вторых, житейских дел по горло. | |
|
|
|
|
|
|
|
для: Deed
(13.03.2013 в 21:11)
| | Да вариант... можно итак сделать, немного коду добавится, буду пробовать | |
|
|
|
|