Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Передать параметр с функции у функцию плагина Jcrop
 
 автор: NE}|{UBOJ   (13.03.2013 в 02:36)   письмо автору
 
 

Здравствуйте. 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/

  Ответить  
 
 автор: confirm   (13.03.2013 в 14:14)   письмо автору
 
   для: NE}|{UBOJ   (13.03.2013 в 02:36)
 

1. Ищите в сети что-то типа "как написать плагин jQuery".
2. Открываете исходный код используемого вами плагина и смотрите как передаются аргументы в него, как они принимают значения по умолчанию.
3. И вообще - открываете учебник JavaScript и читаете о функциях и аргументах.

  Ответить  
 
 автор: NE}|{UBOJ   (13.03.2013 в 16:25)   письмо автору
 
   для: 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);
    }
};

Но так и не дошло как поступить у моем варианте

  Ответить  
 
 автор: confirm   (13.03.2013 в 16:32)   письмо автору
 
   для: NE}|{UBOJ   (13.03.2013 в 16:25)
 

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

  Ответить  
 
 автор: NE}|{UBOJ   (13.03.2013 в 16:41)   письмо автору
 
   для: 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(){})})}

Думаю новичку в нем разобраться нереально.

  Ответить  
 
 автор: confirm   (13.03.2013 в 16:53)   письмо автору
 
   для: NE}|{UBOJ   (13.03.2013 в 16:41)
 

А новичку надо изучать и желательно не с того, что ему непосильно, а с малого, с самого начала.
Как бы это вам поделикатнее - мало передать в плагин аргумент, надо еще понимать, как с этим аргументом плагин взаимодействовать будет. Ваш аргумент же не для alert("Ok!"), и что вы хотите?

  Ответить  
 
 автор: NE}|{UBOJ   (13.03.2013 в 17:21)   письмо автору
 
   для: 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);
};

  Ответить  
 
 автор: confirm   (13.03.2013 в 17:34)   письмо автору
 
   для: 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(){})})}

Далее по коду как раз и будет присвоение значений переданных или по умолчанию.
Если вам сказать где и как, то вряд ли на этом все закончится, а играть в сквош "об стенку горохом" никому не охота.
Оплатите услуги, для вас доработают плагин, иначе углубляйтесь сами в него.

  Ответить  
 
 автор: Deed   (13.03.2013 в 19:28)   письмо автору
 
   для: confirm   (13.03.2013 в 17:34)
 

Плюс к этому есть еще один нюанс - php-обработчик принимает в конкретный момент времени лишь ОДИН файл.

  Ответить  
 
 автор: NE}|{UBOJ   (13.03.2013 в 19:37)   письмо автору
 
   для: 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;
            });

  Ответить  
 
 автор: confirm   (13.03.2013 в 19:56)   письмо автору
 
   для: NE}|{UBOJ   (13.03.2013 в 19:37)
 

Я вам уже сказал - можно объяснить человеку понимающему, или даже подсказать немного, а далее он сам. Но вам, не понимающему простых вещей, стоит заикнуться обо одном, придется либо лекцию читать, либо долго и бесполезно втолковывать. Я ни того, ни другого делать не хочу.

Подумайте сами - вам известно чего вы хотите куда-то передать. Задайтесь вопросом откуда это нечто у вас? Если это вами контролируемая переменная, она асинхронная событию, которая вас интересует, то зачем вам ее передавать куда либо через что-то - объявляйте ее глобальной и в обработчике этого события обращайтесь к ней.
Если же эта переменная, вернее ее значение должно быть частью интересующего вас события, значит увы, вникайте в плагин. Но в этом случае не понятно кто ее породил.

Переменная е не возникает, а объявляется.

  Ответить  
 
 автор: Deed   (13.03.2013 в 20:02)   письмо автору
 
   для: confirm   (13.03.2013 в 19:56)
 

Ему нужно засесть за учебник JS.
У меня уже складывается впечатление, что человеку нужнее, чтобы кто-то бросил все свои дела и решил эту его "проблему", чем понять "как это работает".
Но все мы грешили подобным, будучи абсолютными новичками...

  Ответить  
 
 автор: NE}|{UBOJ   (13.03.2013 в 20:39)   письмо автору
 
   для: Deed   (13.03.2013 в 20:02)
 

Как это работает я понимаю, в коде плагина не могу разобраться. Ну извините если что. Готов отблагодарить за помощь.

  Ответить  
 
 автор: Deed   (13.03.2013 в 19:59)   письмо автору
 
   для: NE}|{UBOJ   (13.03.2013 в 19:37)
 

Аргумент "e" в javascript обычно является укороченным от event - "событие": event.target например. Буква может быть любая.
Ну, а ф-ция updateInfo() здесь просто-напросто прописывает новые значения высоты-ширины картинки после каждого ресайза в скрытые текстовые поля для последующей передачи этих значений в php-обработчик.

  Ответить  
 
 автор: NE}|{UBOJ   (13.03.2013 в 20:36)   письмо автору
 
   для: 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

  Ответить  
 
 автор: confirm   (13.03.2013 в 21:06)   письмо автору
 
   для: NE}|{UBOJ   (13.03.2013 в 20:36)
 

ЗАЧЕМ МНЕ передавать что-то в updateInfo(е)??

Понятия не имею, вы же об этом спрашивали как, а что это уж вам виднее. Как можно поступить, если это допустимо, я вам уже написал.

  Ответить  
 
 автор: Deed   (13.03.2013 в 21:11)   письмо автору
 
   для: 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').

Это все, чем я могу помочь. Во-первых я сам дилетант-любитель, а, во-вторых, житейских дел по горло.

  Ответить  
 
 автор: NE}|{UBOJ   (13.03.2013 в 21:46)   письмо автору
 
   для: Deed   (13.03.2013 в 21:11)
 

Да вариант... можно итак сделать, немного коду добавится, буду пробовать

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования