Domanda

Sto cercando di fare una variabile pari al valore della casella di testo. Ho il valore casella di testo viene impostata su una variabile e restituito come un avviso (per ora), ma io non riesco a capire come chiamare quella variabile dalle altre funzioni.

$('#max_char').keyup(function () {
    var max_char = $(this).val();
    alert(max_char + ' Handler for .keyup() called.');
});

var count_options = {
    'maxCharacterSize': max_char,
    'originalStyle': 'originalDisplayInfo',
    'warningStyle': 'warningDisplayInfo',
    'warningNumber': 40,
    'displayFormat': '#input Characters | #left Characters Left | #words Words'
};

$('#textinput').textareaCount(count_options);
});

HTML

<textarea cols="68" rows="21" name="textinput" id="textinput"></textarea><br/>
    <input type="textbox" id="max_char" name="max_char" value="-1" /> Max Characters <br/>

Qualsiasi aiuto sarebbe grande. Cercando di aggiungere il var max_char alla maxCharacterSize di count_options

È stato utile?

Soluzione

Tutto quello che devi fare è dichiarare max_char in un ambito più elevato, vale a dire fuori della funzione keyup:

var max_char;

$('#max_char').keyup(function () {
    max_char = +$(this).val();
    alert(max_char + ' Handler for .keyup() called.');
});

Si noti inoltre che ho messo un + davanti $(this).val() per la conversione da una stringa in un numero, dal momento che "1" + 1 == "11".


Aggiorna :

Il motivo per il plugin textareaCount non funziona è perché viene inizializzato una volta , il documento pronto. In questo momento, max_char è nulla perché l'utente non ha ancora digitato nulla.

Si sarebbe dovuto sia riconfigurare o reinizializzare il plugin su ogni keyup per ottenere l'effetto che stai cercando. Purtroppo il plugin non documenta un modo semplice per fare questo. Dopo aver scavato attraverso il codice sorgente del plugin, penso che ci sono solo 3 eventi si lega che è necessario ripristinare, prima di poter semplicemente ri-inizializzare di nuovo. Prova questo:

var count_options = {
    'maxCharacterSize': 100, // Just some default value
    'originalStyle': 'originalDisplayInfo',
    'warningStyle': 'warningDisplayInfo',
    'warningNumber': 40,
    'displayFormat': '#input Characters | #left Characters Left | #words Words'
};

// Initialise the plugin on document ready
$('#textinput').textareaCount(count_options);

$('#max_char').keyup(function () {
    var max_char = +$(this).val();
    count_options.maxCharacterSize = max_char;

    // Unbind the 3 events the plugin uses before initialising it
    $('#textinput')
        .next('.charleft').remove().end()
        .unbind('keyup').unbind('mouseover').unbind('paste')
        .textareaCount(count_options);
});

Altri suggerimenti

Se ho capito si correttamente, se si dichiara la var nell'ambito di applicazione globale di javascript

Se si accede direttamente all'ingresso con

$("#max_char").val()
parseInt($('#max_char').val())
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top