JQUERY держать привязанный клик - PullRequest
2 голосов
/ 26 января 2012

HTML:

<div id='myform'>
    Name : <input type='text'/>
    Age : <input type='text'/>
    .....
    <input type='button' class='mysavebutton' value='save'/>
</div>

HTML-скрипт:

$(document).ready(function(){
    $("#myform input:button").click(function(){
        //do save
        alert("Save complete.");
    });  
});

проблема в следующем: как добавить функцию к вводу #myform: кнопка перед "do save" без изменения какого-либо кода выше .. (как добавить плагины)

я уже создаю что-то подобное

$(document).ready(function () {
    $(".mysavebutton").each(function () {
        $(this).data("old_click", $(this).click); // <----- here the problem #1. how to keep click function.

        $(this).unbind("click").click(function () {
            parent = $(this).parents("body");

            $(parent).find("input:textbox").each(function () {
                validate_object(this); //this function validate all textbox on body and add error class to textbox if error
            });

            if ($(parent).find("input:type.error").length == 0) {
                //no error. than call old function
                $(this).data("old_click");  //eval($(this).data("old_click"))
            }
            else {
                 //not run old_click coz error
                alert("Invalid data.")
            }
        });
    });
});

если возможно, починить. если нет, пожалуйста, дайте другое решение. * спасибо * 1014

Ответы [ 3 ]

1 голос
/ 26 января 2012
$(".mysavebutton").each(function(){
    var self = $(this);
    var old_click_handler = self.data('events')['click'][0].handler;
    self.unbind("click").click(function () {
        alert('pre save');
        old_click_handler();
    });    
});
1 голос
/ 26 января 2012
$(document).ready(function () {
  $(".mysavebutton").each(function () {
    $(this).data("old_click", $(this).data('events')['click'][0].handler);

    $(this).unbind("click").click(function () {
        //get the form
        var parent = $(this).closest('form');

        $(parent).find("input:textbox").each(function () {
            validate_object(this); //this function validate all textbox on body and add error class to textbox if error
        });

        if ($(parent).find("input:type.error").length == 0) {
            //no error. than call old function
            $(this).data("old_click").apply(this, arguments);
        }
        else {
             //not run old_click coz error
            alert("Invalid data.")
        }
    });
});
});

Может быть лучше, но это должно сработать.

http://jsfiddle.net/GhLSS/1/

0 голосов
/ 26 января 2012

Простым решением может быть включение вашего вторичного триггера на mouseup, так как он срабатывает до щелчка: http://www.quirksmode.org/js/events_mouse.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...